﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Imports Commander_Wars.Spieletools
Public Class ObjektKarteneditormenue
    Inherits ObjektFormMenue

    Enum FillModi
        None
        Rectancle
        Line
        Ellipse
    End Enum
    Public FillMode As FillModi
    Dim P1 As Point = New Point(-1, -1)
    Dim P2 As Point = New Point(-1, -1)

    Enum KEModi
        Nichts
        Landschaftplazieren
        Einheitplazieren
        Gebaeudeplazieren
        Spezialgebaeudeplazieren
        Einheitabziehen
        Minimap
        Box
        EinheitenWerteVeraendern
        LandschaftVeraendern
        EinheitLaden
    End Enum
    Public KEModus As KEModi
    Public Karteneditor As ObjektKarteneditor = Nothing
    Dim LandschaftsIDAendern As ChangeTileSetDirection = Nothing
    Public Sub New()
        MyBase.New(New ObjektButton() {}, Nothing, New ObjektNumericUpDown() {}, Nothing, New ObjektValueSchieber() {}, New ObjektMultiValue() {}, New ObjektCheckBox() {})
        If DataSettings.Verhaeltnis = Hauptmenue.Breitbild Then
            Objektverwalter.LoadHintergrund(DataSettings.Resourcenpfad + "Backgrounds\SpielHintergundGross.png")
        Else
            Objektverwalter.LoadHintergrund(DataSettings.Resourcenpfad + "Backgrounds\SpielHintergund.png")
        End If
        Hauptmenue.Formmodus = Hauptmenue.Formmodi.Editor
        NeueKarte(20, 20, 3, Nothing)
        Objektverwalter.Spielfeld.Kartenname = "Karte"

        Dim Buttons() As ObjektButton = {New ObjektButton(0, 0, DataSettings.Resourcenpfad + "Objects\Button.png", "Menue", New PointF()), New ObjektButton(0, 0, DataSettings.Resourcenpfad + "Objects\Button.png", "Karte", New PointF()), New ObjektButton(0, 0, DataSettings.Resourcenpfad + "Objects\Button.png", "Befehle", New PointF()), New ObjektButton(0, 0, DataSettings.Resourcenpfad + "Objects\Button.png", "Fuellen", New PointF()), New ObjektButton(0, 0, DataSettings.Resourcenpfad + "Objects\Button.png", "Karten Unterstuetzung", New PointF())}
        Dim Funktionen() As String = {"Speichern Strg+S", "Speichern Unter Strg+U", "Laden Strg+L", "Karte aus Bild laden Strg+L+B", "Beenden Esc", "Neue Karte", "Karte veraendern", "Horizontal Spiegeln", "Vertikal Spiegeln", "Drehen 180°", "Drehen -180°", "Farben Aendern", "Zufallskarte", "Spieler Zahl Optimieren", "Karteneinstellungen", "Spieler veraendern", "Schlacht Wechsel Tab", "Abzug Strg+E", "Einheiten Werte Veraendern Strg+V", "Einheiten Laden", "Landschaft Veraendern Strg+C", "Keiner", "Ellipse", "Linie", "Rechteck", "Karte importieren", "Karte exportieren", "AWDS-Karte importieren", "AWDS-Karte exportieren", "AW4-Karte importieren", "AW4-Karte exportieren"}
        Dim Anzahl() As Integer = {5, 11, 5, 4, 6}
        Taskleiste = New ObjektTaskleiste(Buttons, Funktionen, Anzahl)
        SetMausBild()

    End Sub


    Public Overrides Sub SetMausBild()
        If Hauptmenue.Rechteck.Contains(ObjektMaus.XKoordinate, ObjektMaus.YKoordinate) Then
            If IsNothing(Taskleiste) Then
                SpielCursorBildFinden()
            Else
                If Taskleiste.Modus = ObjektTaskleiste.Modi.Ausgefahren Then
                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue
                Else
                    SpielCursorBildFinden()
                End If
            End If
        Else
            ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue
            '  SpielCursorBildFinden()
        End If
    End Sub
    Public Sub SpielCursorBildFinden()
        Dim X As Integer = Hauptmenue.SpielfeldPunkt.X
        Dim Y As Integer = Hauptmenue.SpielfeldPunkt.Y
        If Objektverwalter.Spielfeld.OnMap(X, Y) Then
            Select Case KEModus
                Case KEModi.Einheitabziehen
                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Abzug
                Case KEModi.Einheitplazieren
                    If Karteneditor.AktuelleEinheit >= 0 Then
                        If Objektverwalter.KannEinheitplaziertwerden(X, Y, Objektverwalter.AlleEinheiten(Karteneditor.AktuelleEinheit).Einheit.EinheitenID, ObjektSpielfeld.Wetterarten.Sonne) = False Then
                            ObjektMaus.Zustand = ObjektMaus.Zustaende.NichtPlazierbar
                        Else
                            ObjektMaus.Zustand = ObjektMaus.Zustaende.Normal
                        End If

                    End If
                Case KEModi.Gebaeudeplazieren

                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Normal

                Case KEModi.Landschaftplazieren

                    If Objektverwalter.KannLandschaftplaziertwerden(X, Y, Karteneditor.AktuelleLandschaft) = True Then
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.Normal
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.NichtPlazierbar
                    End If
                Case KEModi.Nichts

                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Normal

                Case KEModi.Spezialgebaeudeplazieren
                    If Objektverwalter.KannSpezialGebaeudeplaziertwerden(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y) = True Then
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.Normal
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.NichtPlazierbar
                    End If
                Case KEModi.Box
                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue

                Case KEModi.EinheitenWerteVeraendern, KEModi.EinheitLaden
                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Angriff
                Case KEModi.LandschaftVeraendern
                    If LandschaftsIDAendern Is Nothing Then
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.Angriff
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue
                    End If
            End Select
        Else
            Select Case KEModus
                Case KEModi.Box
                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue
                Case KEModi.LandschaftVeraendern
                    If LandschaftsIDAendern Is Nothing Then
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.Angriff
                    Else
                        ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue
                    End If
                Case Else
                    ObjektMaus.Zustand = ObjektMaus.Zustaende.Normal
            End Select
        End If
    End Sub
    Public Overrides Sub KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        Select Case e.KeyCode
            Case Keys.Escape
                Hauptmenue.Ini(Hauptmenue.Formmodi.Hauptmenue)
            Case Keys.S
                If e.Control = True Then
                    SaveMap()
                End If
            Case DataSettings.SelectTaste
                If KEModus = KEModi.Minimap Then
                    Objektverwalter.Minimap = Nothing
                    KEModus = KEModi.Nichts
                Else
                    KEModus = KEModi.Minimap
                    Objektverwalter.Minimap = New ObjektMinimap(Objektverwalter.Spielfeld, Nothing)
                End If
            Case Keys.U
                If e.Control = True Then
                    CheckMap()
                    Hauptmenue.SpeichernUnterName()
                End If
            Case Keys.L
                If e.Control = True Then
                    Hauptmenue.KarteLadenEditor()
                End If
            Case Keys.E
                If e.Control = True Then
                    KEModus = KEModi.Einheitabziehen
                End If
            Case Keys.V
                If e.Control = True Then
                    KEModus = KEModi.EinheitenWerteVeraendern
                End If
            Case Keys.C
                If e.Control = True Then
                    KEModus = KEModi.LandschaftVeraendern
                End If
            Case DataSettings.Oben
                CursorVerschieben(0, -1)
            Case DataSettings.Unten
                CursorVerschieben(0, 1)
            Case DataSettings.Rechts
                CursorVerschieben(1, 0)
            Case DataSettings.Links
                CursorVerschieben(-1, 0)
            Case DataSettings.Bestaetigen
                Dim Maus As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, ObjektMaus.XKoordinate, ObjektMaus.YKoordinate, 0)
                MouseDown(sender, Maus)
            Case DataSettings.Abrechen
                Dim Maus As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Right, 1, ObjektMaus.XKoordinate, ObjektMaus.YKoordinate, 0)
                MouseDown(sender, Maus)
                MouseMove(sender, Maus)
            Case DataSettings.Schlachtwechsel
                SchlachtWechsel()
            Case DataSettings.Key_Scrollen
                If My.Computer.Keyboard.CtrlKeyDown Then
                    Hauptmenue.ScrollenKameraKippen = True
                    Hauptmenue.ScrollenX = ObjektMaus.XKoordinate
                    Hauptmenue.ScrollenY = ObjektMaus.YKoordinate
                Else
                    Hauptmenue.Scrollen = True
                    Hauptmenue.ScrollenX = ObjektMaus.XKoordinate
                    Hauptmenue.ScrollenY = ObjektMaus.YKoordinate
                End If
            Case Else
                KeyDownObjekte(sender, e)
        End Select
    End Sub

    Public Overrides Sub Malen()
        MyBase.ObjekteMalen()
        Karteneditor.Malen()
        If LandschaftsIDAendern IsNot Nothing Then
            If KEModus = KEModi.LandschaftVeraendern Then
                LandschaftsIDAendern.Malen()
            Else
                LandschaftsIDAendern = Nothing
            End If
        End If
    End Sub

    Public Overrides Sub MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If KEModus = KEModi.Minimap Then
            KEModus = KEModi.Nichts
            Objektverwalter.Minimap.Reset()
            Objektverwalter.Minimap = Nothing
        End If
        If Karteneditor.MouseDown(e, Objektverwalter.Menue) = False Then
            checkMouseDownObjekte(e.X, e.Y)
            If Taskleiste.Modus = ObjektTaskleiste.Modi.Keiner And KEModus <> KEModi.Box Then
                Select Case e.Button
                    Case Windows.Forms.MouseButtons.Left
                        If Hauptmenue.Rechteck.Contains(e.Location) Then
                            Select Case FillMode
                                Case FillModi.None
                                    Select Case KEModus
                                        Case KEModi.Einheitplazieren
                                            Objektverwalter.Einheitplazieren()
                                        Case KEModi.Landschaftplazieren
                                            Objektverwalter.Landschaftplazieren()
                                        Case KEModi.Gebaeudeplazieren
                                            Objektverwalter.Gebaeudeplazieren()
                                        Case KEModi.Einheitabziehen
                                            Objektverwalter.EinheitAbziehen(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y)
                                        Case KEModi.EinheitenWerteVeraendern
                                            EinheitenVeraenderungsBoxErschaffen(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y)
                                        Case KEModi.EinheitLaden
                                            Dim Unit As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                                            If Unit IsNot Nothing Then
                                                If Unit.Ladung.Length > 0 Then
                                                    If MessageBox.ShowBoxChangeLoadedUnit(Unit) = MsgBoxResult.Ok Then
                                                        Objektverwalter.Spielfeld.Einheiten(Unit.X, Unit.Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = MessageBox.Unit
                                                    End If
                                                End If
                                            End If
                                        Case KEModi.Spezialgebaeudeplazieren
                                            Objektverwalter.SpezialGebaeudePlazieren(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y)
                                        Case KEModi.LandschaftVeraendern
                                            If LandschaftsIDAendern Is Nothing Then
                                                If Objektverwalter.Spielfeld.OnMap(Hauptmenue.SpielfeldPunkt) Then
                                                    LandschaftsIDAendern = New ChangeTileSetDirection(Objektverwalter.Spielfeld.Landschaften(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht))
                                                End If
                                            Else
                                                LandschaftsIDAendern.MouseDown(e)
                                            End If
                                    End Select
                                Case Else
                                    SetPointAndFill()
                            End Select
                        Else
                            ChangeFillMode(FillModi.None)
                        End If
                    Case MouseButtons.Middle
                        MouseDownMitte(e)
                    Case MouseButtons.Right
                        ChangeFillMode(FillModi.None)
                        If Hauptmenue.Rechteck.Contains(e.Location) Then
                            Select Case KEModus

                                Case KEModi.LandschaftVeraendern
                                    If LandschaftsIDAendern Is Nothing Then
                                        SelectField()
                                    Else
                                        LandschaftsIDAendern.MouseDown(e)
                                    End If
                                Case Else
                                    SelectField()
                            End Select
                        End If
                End Select
            End If
        Else
            ChangeFillMode(FillModi.None)
        End If
    End Sub

    ''' <summary>
    ''' Nimmt das aktuelle Feld und waehlt zu erst Einheit dann Gebaeude zuletzt Landschaft aus!
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub SelectField()
        Dim P As New Point(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y)
        If Objektverwalter.Spielfeld.OnMap(P.X, P.Y) Then
            Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(P.X, P.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
            If E Is Nothing Then
                Dim L As ObjektLandschaft = Objektverwalter.Spielfeld.Landschaften(P.X, P.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                If L.Gebaeude Is Nothing Then
                    'Landschaft auswaehlen
                    Dim Z As Integer = -1
                    For I = 0 To Objektverwalter.LandschaftenBilder.Length - 1
                        If Objektverwalter.LandschaftenBilder(I).ID = L.LandschaftsID Then
                            Z = I
                            Exit For
                        End If
                    Next
                    If Z >= 0 Then
                        Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + 1, 10)
                        'Den Startindex setzen
                        Dim Max As Integer = Karteneditor.LandschaftenEinheiteninderBreite * Karteneditor.LandschafteninderHoehe + Karteneditor.StartIndexLandschaften
                        Dim Sindex As Integer = Karteneditor.StartIndexLandschaften
                        While Sindex >= Z
                            Sindex -= Karteneditor.LandschaftenEinheiteninderBreite
                        End While
                        If Sindex < 0 Then Sindex = 0
                        While Max <= Z
                            Max += Karteneditor.LandschaftenEinheiteninderBreite
                            Sindex += Karteneditor.LandschaftenEinheiteninderBreite
                        End While
                        Z -= Sindex
                        Dim B As Integer
                        Dim H As Integer = Math.DivRem(Z, Karteneditor.LandschaftenEinheiteninderBreite, B)
                        Karteneditor.CheckEditorModus(P1, Me)
                        Karteneditor.StartIndexLandschaften = Sindex
                        'Den Punkt berechnen
                        Dim StartPunkt As New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                        Dim Rest As Integer
                        Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                        StartPunkt.Y += Rest / 2
                        Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                        Dim X2 As Integer = Rest / 2
                        StartPunkt.X += Rest / 2
                        StartPunkt.X += ObjektKarteneditor.PlatzeinesButtons * B
                        StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H
                        Karteneditor.CheckLandschaftenAuswahl(StartPunkt, Me)

                    End If
                Else
                    'Gebaeude auswaehlen!
                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(L.Gebaeude.Rechteck.X, L.Gebaeude.Rechteck.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude
                    ChangeSpielerAuswahl(G.Spieler)
                    If G.Rechteck.Width > Hauptmenue.Feldbreite Then
                        'Ein Spezial Gebaeude!
                        Dim Z As Integer = -1
                        For I = 0 To Objektverwalter.AlleGebaeude.Length - 1
                            If Objektverwalter.AlleGebaeude(I).GebaeudeID = G.GebaeudeID Then
                                Z = Objektverwalter.GebaeudeTextur.GetSpezialIDAusAllgemeinerID(I, Karteneditor.MomenentanerSpieler)
                                Exit For
                            ElseIf Objektverwalter.AlleGebaeude(I).SpezialGebaeude Then
                                If Karteneditor.MomenentanerSpieler > 0 Then
                                    If Not Objektverwalter.AlleGebaeude(I).NurNeutral Then
                                        Z += 1
                                    End If
                                Else
                                    Z += 1
                                End If
                            End If
                        Next
                        If Z >= 0 Then
                            Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + (Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length) * 3 + 1, 10)
                            Dim Max As Integer = Karteneditor.LandschaftenEinheiteninderBreite * Karteneditor.LandschafteninderHoehe + Karteneditor.StartIndexSpezialgebaeude
                            Dim Sindex As Integer = Karteneditor.StartIndexSpezialgebaeude
                            While Sindex >= Z
                                Sindex -= Karteneditor.LandschaftenEinheiteninderBreite
                            End While
                            If Sindex < 0 Then Sindex = 0
                            While Max <= Z
                                Max += Karteneditor.LandschaftenEinheiteninderBreite
                                Sindex += Karteneditor.LandschaftenEinheiteninderBreite
                            End While
                            Z -= Sindex
                            Dim B As Integer
                            Dim H As Integer = Math.DivRem(Z, Karteneditor.LandschaftenEinheiteninderBreite, B)
                            Karteneditor.CheckEditorModus(P1, Me)
                            Karteneditor.StartIndexSpezialgebaeude = Sindex
                            Dim StartPunkt As New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                            Dim Rest As Integer
                            Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                            StartPunkt.Y += Rest / 2
                            Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                            Dim X2 As Integer = Rest / 2
                            StartPunkt.X += Rest / 2
                            StartPunkt.X += ObjektKarteneditor.PlatzeinesButtons * B
                            StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H
                            Karteneditor.CheckSpezialGebaeudeAuswahl(StartPunkt, Me)
                        End If
                    Else
                        'ein normales Gebaeude
                        Dim Z As Integer = -1
                        For I = 0 To Objektverwalter.AlleGebaeude.Length - 1
                            If Objektverwalter.AlleGebaeude(I).GebaeudeID = G.GebaeudeID Then
                                Z = Objektverwalter.GebaeudeTextur.GetNormaleIDAusAllgemeinerID(I, Karteneditor.MomenentanerSpieler)
                                Exit For
                            End If
                        Next
                        If Z >= 0 Then
                            Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + (Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length) * 2 + 1, 10)
                            Dim Max As Integer = Karteneditor.GebaeudeinderBreite * Karteneditor.GebaeudeinderHoehe + Karteneditor.StartIndexGebaeude
                            Dim Sindex As Integer = Karteneditor.StartIndexGebaeude
                            While Sindex >= Z
                                Sindex -= Karteneditor.GebaeudeinderBreite
                            End While
                            If Sindex < 0 Then Sindex = 0
                            While Max <= Z
                                Max += Karteneditor.GebaeudeinderBreite
                                Sindex += Karteneditor.GebaeudeinderBreite
                            End While
                            Z -= Sindex

                            Dim B As Integer
                            Dim H As Integer = Math.DivRem(Z, Karteneditor.GebaeudeinderBreite, B)
                            Karteneditor.CheckEditorModus(P1, Me)
                            Karteneditor.StartIndexGebaeude = Sindex
                            Dim StartPunkt As Point
                            If Hauptmenue.ZoomedIn Then
                                StartPunkt = New Point(Karteneditor.RechteckEditor(3).X + 3, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 1 + Hauptmenue.Feldbreite)
                            Else
                                StartPunkt = New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                            End If

                            Dim Rest As Integer
                            Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                            StartPunkt.Y += Rest / 2
                            Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                            StartPunkt.X += Rest / 2

                            StartPunkt.X += (Hauptmenue.Feldbreite * 1.5 + 4) * B
                            StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H + ObjektKarteneditor.PlatzeinesButtons / 2

                            Karteneditor.CheckGebaeudeAuswahl(StartPunkt, Me)
                        End If
                    End If
                End If
            Else
                'Einheit auswaehlen!
                Dim Z As Integer = -1
                For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
                    If Objektverwalter.AlleEinheiten(I).EinheitenID = E.EinheitenID Then
                        Z = I
                        Exit For
                    End If
                Next
                If Z >= 0 Then
                    Dim P1 As New Point(Karteneditor.RechteckEditor(0).X + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length / 2 - 17 + Karteneditor.RechteckEditor(0).Width / Karteneditor.EditorModusTexturen.Length + 1, 10)
                    Dim Max As Integer = Karteneditor.LandschaftenEinheiteninderBreite * Karteneditor.LandschafteninderHoehe + Karteneditor.StartIndexEinheiten
                    Dim Sindex As Integer = Karteneditor.StartIndexEinheiten
                    While Sindex >= Z
                        Sindex -= Karteneditor.LandschaftenEinheiteninderBreite
                    End While
                    If Sindex < 0 Then Sindex = 0
                    While Max <= Z
                        Max += Karteneditor.LandschaftenEinheiteninderBreite
                        Sindex += Karteneditor.LandschaftenEinheiteninderBreite
                    End While
                    Z -= Sindex
                    Dim B As Integer
                    Dim H As Integer = Math.DivRem(Z, Karteneditor.LandschaftenEinheiteninderBreite, B)
                    Karteneditor.CheckEditorModus(P1, Me)
                    Karteneditor.StartIndexEinheiten = Sindex
                    'Den Punkt berechnen
                    Dim StartPunkt As New Point(Karteneditor.RechteckEditor(3).X + 4, Karteneditor.RechteckEditor(3).Y + ObjektKarteneditor.Pfeilplatzgesamt / 2 + 4)
                    Dim Rest As Integer
                    Math.DivRem((Karteneditor.RechteckEditor(3).Height - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesButtons, Rest)
                    StartPunkt.Y += Rest / 2
                    Math.DivRem(Karteneditor.RechteckEditor(3).Width, ObjektKarteneditor.PlatzeinesButtons, Rest)
                    Dim X2 As Integer = Rest / 2
                    StartPunkt.X += Rest / 2
                    StartPunkt.X += ObjektKarteneditor.PlatzeinesButtons * B
                    StartPunkt.Y += ObjektKarteneditor.PlatzeinesButtons * H
                    ChangeSpielerAuswahl(E.Spieler)
                    Karteneditor.CheckEinheitenAuswahl(StartPunkt, Me)


                End If
            End If
        End If
    End Sub

    Private Sub ChangeSpielerAuswahl(ByVal Spieler As Integer)
        Dim Rest As Integer = 0
        Dim AnzahldergemaltenSpieler As Integer = Math.DivRem((Karteneditor.RechteckEditor(2).Width - ObjektKarteneditor.Pfeilplatzgesamt), ObjektKarteneditor.PlatzeinesSpielerButtons, Rest)
        Karteneditor.StartSpieler = Spieler
        Karteneditor.MomenentanerSpieler = Spieler
        If Karteneditor.StartSpieler + AnzahldergemaltenSpieler > Objektverwalter.Spielfeld.Spieler.Length - 1 Then
            Karteneditor.StartSpieler = Objektverwalter.Spielfeld.Spieler.Length - AnzahldergemaltenSpieler - 1
        End If
        If Karteneditor.StartSpieler < 0 Then
            Karteneditor.StartSpieler = 0
        End If
        Dim NTerSpieler As Integer = Spieler - Karteneditor.StartSpieler
        Dim Startpunkt As New Point(2 + Karteneditor.RechteckEditor(2).X + (Karteneditor.RechteckEditor(2).Width - ObjektKarteneditor.PlatzeinesSpielerButtons * Objektverwalter.Spielfeld.Spieler.Length) / 2, 108)
        If ObjektKarteneditor.PlatzeinesSpielerButtons * Objektverwalter.Spielfeld.Spieler.Length > Karteneditor.RechteckEditor(2).Width Then
            Startpunkt = New Point(Karteneditor.RechteckEditor(2).X + ObjektKarteneditor.Pfeilplatzgesamt / 2 + Rest / 2 + 1, 108)
        End If

        Startpunkt.X += Hauptmenue.Feldbreite * 2 * NTerSpieler
        Karteneditor.SpielerauswahlcheckKlick(Startpunkt)
    End Sub

    Public Overrides Sub MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Select Case e.Button
            Case Windows.Forms.MouseButtons.Left
                If Karteneditor.MouseDown(e, Objektverwalter.Menue) = False Then
                    If Taskleiste.Modus = ObjektTaskleiste.Modi.Keiner Then
                        Select Case KEModus
                            Case KEModi.Einheitplazieren
                                Objektverwalter.Einheitplazieren()
                            Case KEModi.Landschaftplazieren
                                Objektverwalter.Landschaftplazieren()
                            Case KEModi.Gebaeudeplazieren
                                Objektverwalter.Gebaeudeplazieren()
                            Case KEModi.Einheitabziehen
                                Objektverwalter.EinheitAbziehen(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y)

                        End Select
                    End If
                End If
            Case Windows.Forms.MouseButtons.None
                Select Case KEModus
                    Case KEModi.LandschaftVeraendern
                        If LandschaftsIDAendern IsNot Nothing Then
                            LandschaftsIDAendern.MouseMove(e)
                        End If
                    Case Else
                        MouseMoveObjekte(e.X, e.Y)
                End Select
        End Select
    End Sub

    Public Overrides Sub MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Karteneditor.MouseUp(e) = False Then
            Dim F As String = checkMouseUPObjekte(e.X, e.Y)
            If F = "" Then
                Select Case e.Button
                    Case Windows.Forms.MouseButtons.Left
                        If KEModus = KEModi.LandschaftVeraendern Then
                            If LandschaftsIDAendern IsNot Nothing Then
                                'einfach loeschen!
                                Select Case LandschaftsIDAendern.MouseUp(e).ToLower
                                    Case "abbrechen!"
                                        LandschaftsIDAendern = Nothing
                                    Case "aendern"
                                        LandschaftsIDAendern.CreateChanges()
                                        LandschaftsIDAendern = Nothing
                                End Select
                            End If
                        Else
                            If Karteneditor.MouseUp(e) = False Then
                                Select Case KEModus
                                    Case KEModi.Landschaftplazieren
                                        Objektverwalter.UebergaengeAktualiesieren()
                                    Case KEModi.Gebaeudeplazieren
                                        Objektverwalter.UebergaengeAktualiesieren()
                                End Select
                            End If
                        End If
                    Case MouseButtons.Middle
                        MouseUpMitte()
                End Select
            Else
                InputString(F)
            End If
        End If
    End Sub
    Private Sub InputString(ByVal F As String)
        'Wir werten die Funktion aus
        Select Case F.ToLower

            Case "beenden esc"
                Hauptmenue.Ini(Hauptmenue.Formmodi.Hauptmenue)
            Case "abzug strg+e"
                KEModus = KEModi.Einheitabziehen
            Case "speichern strg+s"
                SaveMap()
            Case "speichern unter strg+u"
                CheckMap()
                Hauptmenue.SpeichernUnterName()
            Case "laden strg+l"
                Hauptmenue.KarteLadenEditor()
            Case "karte importieren"
                Hauptmenue.KarteLadenEditorausTXT()
            Case "awds-karte importieren"
                Hauptmenue.KarteLadenEditorausAWSMap()
            Case "awds-karte exportieren"
                Hauptmenue.KarteExportierenEditorausAWSMap()
            Case "aw4-karte importieren"
                Hauptmenue.KarteLadenEditorausAW4Map()
            Case "aw4-karte exportieren"
                Hauptmenue.KarteExportierenEditorausAW4Map()
            Case "karte exportieren"
                Hauptmenue.KarteExportieren()
            Case "neue karte"
                If MessageBox.ShowNewMap(True) = MsgBoxResult.Ok Then
                    NeueKarte(MessageBox.Output(1), MessageBox.Output(2), MessageBox.Output(0))
                    KEModus = KEModi.Nichts
                    Karteneditor.CursorRechteckesetzen()
                End If
            Case "karte veraendern"
                If MessageBox.ShowNewMap(False) = MsgBoxResult.Ok Then
                    Karteveraendern(MessageBox.Output(1), MessageBox.Output(2), MessageBox.Output(0))
                    KEModus = KEModi.Nichts
                    Karteneditor.CursorRechteckesetzen()
                End If
            Case "karte aus bild laden strg+l+b"
                Hauptmenue.KarteausBildLadenEditor()
            Case "farben aendern"
                If Karteneditor.MomenentanerSpieler > 0 Then
                    SpielerFarbeAendern(Karteneditor.MomenentanerSpieler)
                End If
            Case "zufallskarte"
                If MessageBox.ShowBoxRandomMap() = MsgBoxResult.Ok Then
                    CreateRandomMap()
                End If
            Case "horizontal spiegeln"
                Objektverwalter.SpiegelnHorizontal()
            Case "vertikal spiegeln"
                Objektverwalter.SpiegelnVertikal()
            Case "drehen 180°"
                Objektverwalter.Drehen180()
            Case "drehen -180°"
                Objektverwalter.Drehen_180()
            Case "einheiten werte veraendern strg+v"
                KEModus = KEModi.EinheitenWerteVeraendern
            Case "einheiten laden"
                KEModus = KEModi.EinheitLaden
            Case "schlacht wechsel tab"
                SchlachtWechsel()
            Case "landschaft veraendern strg+c"
                KEModus = KEModi.LandschaftVeraendern
            Case "spieler zahl optimieren"
                OptimizePlayerNumber()
            Case "keiner"
                ChangeFillMode(FillModi.None)
            Case "ellipse"
                ChangeFillMode(FillModi.Ellipse)
            Case "linie"
                ChangeFillMode(FillModi.Line)
            Case "rechteck"
                ChangeFillMode(FillModi.Rectancle)
            Case "karteneinstellungen"
                If MessageBox.ShowSetMapSettings() = MsgBoxResult.Ok Then
                    Objektverwalter.Spielfeld.Kartenname = MessageBox.Output(0)
                    Objektverwalter.Spielfeld.Beschreibung = MessageBox.Output(1)
                    Objektverwalter.Spielfeld.Autor = MessageBox.Output(2)
                    Dim Left As Integer = MessageBox.Output(3)
                    Dim Top As Integer = MessageBox.Output(4)
                    Dim Right As Integer = MessageBox.Output(5)
                    Dim Bottom As Integer = MessageBox.Output(6)
                    If Left > Right Then
                        Left = Right
                        Right = MessageBox.Output(3)
                    End If
                    If Top > Bottom Then
                        Top = Bottom
                        Bottom = MessageBox.Output(4)
                    End If
                    Objektverwalter.Spielfeld.StartRechteck = New Rectangle(Left, Top, Right, Bottom)
                    Objektverwalter.Spielfeld.Regeln.Wetterwahrscheinlichkeiten = CType(MessageBox.Output(7), List(Of Integer)).ToArray
                    Objektverwalter.Spielfeld.Regeln.Nebel = [Enum].Parse(Nebelarten.Aufklaerungsnebel.GetType, MessageBox.Output(8))
                    Objektverwalter.Spielfeld.Regeln.Luftschlacht = MessageBox.Output(9)
                    Objektverwalter.Spielfeld.Regeln.LevelModus = MessageBox.Output(10)
                    Objektverwalter.Spielfeld.Regeln.Standardwetter = [Enum].Parse(ObjektSpielfeld.Wetterarten.Sandsturm.GetType, MessageBox.Output(11))
                    Objektverwalter.Spielfeld.Regeln.Zufallswetter = MessageBox.Output(12)

                    MessageBox.Output.Clear()
                End If
            Case "spieler veraendern"
                If Karteneditor.MomenentanerSpieler < 1 Then
                    MessageBox.ShowEditPlayer(1)
                Else
                    MessageBox.ShowEditPlayer(Karteneditor.MomenentanerSpieler)
                End If
                MessageBox.Output.Clear()
        End Select
    End Sub
    ''' <summary>
    ''' Damit veraendern wir die Farbe des Spielers
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub SpielerFarbeAendern(ByVal Spieler As Integer)
        If MessageBox.ShowColorDialogue(Sprachconverter.Translate("Spielerfarbe"), Objektverwalter.Spielfeld.Spieler(Spieler).Farbe) = MsgBoxResult.Ok Then
            'So jetzt haben wir eine Farbe festgelegt.
            'Jetzt ordnen wir sie dem Spieler zu.
            Objektverwalter.Spielfeld.Spieler(Spieler).Farbe = MessageBox.CurrentColor
        End If
    End Sub

    Private Sub MouseDownMitte(ByVal e As System.Windows.Forms.MouseEventArgs)
        If e.Clicks >= 2 Then
            Objektverwalter.Zentrieren()
        Else
            If My.Computer.Keyboard.CtrlKeyDown Then
                Hauptmenue.ScrollenKameraKippen = True
                Hauptmenue.ScrollenX = e.X
                Hauptmenue.ScrollenY = e.Y
            Else
                Hauptmenue.Scrollen = True
                Hauptmenue.ScrollenX = e.X
                Hauptmenue.ScrollenY = e.Y
            End If
        End If
    End Sub

    Private Sub MouseUpMitte()
        Hauptmenue.Scrollen = False
        Hauptmenue.ScrollenKameraKippen = False
    End Sub

    Public Overrides Sub Frame()
        MarkFields(P1, P2)
        Hauptmenue.SpielfeldScrollen()

    End Sub
#Region "ToolTip"
    Dim Selected As Integer = -1
    ''' <summary>
    ''' Checks if the Cursor has moved
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DidCursorMove() As Boolean
        If Hauptmenue.SpielfeldPunkt = New Point(-1, -1) Or ObjektMaus.XKoordinate > DataSettings.BildschirmBreite - Karteneditor.Randbreite Then
            Dim NewSelected As Integer
            Select Case Karteneditor.EditorModus
                Case ObjektKarteneditormenue.KEModi.Einheitabziehen
                    NewSelected = -1
                Case ObjektKarteneditor.EditorModi.Einheiten
                    NewSelected = Karteneditor.GetEinheitenAuswahl(ObjektMaus.GetCursorPosition, Me)
                Case ObjektKarteneditor.EditorModi.Gebaeude
                    NewSelected = Karteneditor.GetGebaeudeAuswahl(ObjektMaus.GetCursorPosition, Me)
                Case ObjektKarteneditor.EditorModi.Spezialgebaeude
                    NewSelected = Karteneditor.GetSpezialGebaeudeAuswahl(ObjektMaus.GetCursorPosition, Me)
                Case ObjektKarteneditor.EditorModi.Landschaften
                    NewSelected = Karteneditor.GetLandschaftenAuswahl(ObjektMaus.GetCursorPosition, Me)
            End Select
            If NewSelected >= 0 Then
                If NewSelected = Selected Then
                    Selected = NewSelected
                    Return False
                Else
                    Selected = NewSelected
                    Return True
                End If
            Else
                Selected = NewSelected
                Return True
            End If
        Else
            Return MyBase.DidCursorMove()
        End If
    End Function
    ''' <summary>
    ''' Shows the current Tooltip
    ''' </summary>
    ''' <remarks></remarks>
    Public Overrides Sub ShowToolTip()
        If MyBase.ToolTipCounterFrame Then
            If Objektverwalter.ToolTips Is Nothing Then
                If Hauptmenue.SpielfeldPunkt.X >= 0 And ObjektMaus.XKoordinate < DataSettings.BildschirmBreite - Karteneditor.Randbreite Then
                    If Objektverwalter.Spielfeld.OnMap(Hauptmenue.SpielfeldPunkt) Then
                        Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                        If E Is Nothing Then
                            Dim L As ObjektLandschaft = Objektverwalter.Spielfeld.Landschaften(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                            If L.Gebaeude Is Nothing Then
                                Objektverwalter.ToolTips = New ToolTip(Sprachconverter.Translate(L.Landschaftsname), Sprachconverter.GetToolTip(L.LandschaftsID), ObjektMaus.GetCursorPosition)
                            Else
                                Objektverwalter.ToolTips = New ToolTip(Sprachconverter.Translate(L.Gebaeude.Gebaeudename), Sprachconverter.GetToolTip(L.Gebaeude.GebaeudeID), ObjektMaus.GetCursorPosition)
                            End If
                        Else
                            Objektverwalter.ToolTips = New ToolTip(Sprachconverter.Translate(E.Einheitenname), Sprachconverter.GetToolTip(E.EinheitenID), ObjektMaus.GetCursorPosition)
                        End If
                    End If
                Else
                    If Selected >= 0 Then
                        Select Case Karteneditor.EditorModus
                            Case ObjektKarteneditormenue.KEModi.Einheitabziehen

                            Case ObjektKarteneditor.EditorModi.Einheiten
                                If Selected < Objektverwalter.AlleEinheiten.Length Then
                                    Objektverwalter.ToolTips = New ToolTip(Sprachconverter.Translate(Objektverwalter.AlleEinheiten(Selected).Einheit.Einheitenname), Sprachconverter.GetToolTip(Objektverwalter.AlleEinheiten(Selected).EinheitenID), ObjektMaus.GetCursorPosition)
                                Else
                                End If
                            Case ObjektKarteneditor.EditorModi.Gebaeude
                                If Selected < Objektverwalter.AlleGebaeude.Length Then
                                    Dim G As ObjektGebaeude = ObjektLadeklasse.NewGebaeude(Objektverwalter.AlleGebaeude(Selected).GebaeudeID, 0, -20, -20)
                                    Objektverwalter.ToolTips = New ToolTip(Sprachconverter.Translate(G.Gebaeudename), Sprachconverter.GetToolTip(G.GebaeudeID), ObjektMaus.GetCursorPosition)
                                Else
                                End If
                            Case ObjektKarteneditor.EditorModi.Spezialgebaeude
                                If Selected < Objektverwalter.AlleGebaeude.Length Then
                                    Dim G As ObjektGebaeude = ObjektLadeklasse.NewGebaeude(Objektverwalter.AlleGebaeude(Selected).GebaeudeID)
                                    Objektverwalter.ToolTips = New ToolTip(Sprachconverter.Translate(G.Gebaeudename), Sprachconverter.GetToolTip(G.GebaeudeID), ObjektMaus.GetCursorPosition)
                                Else
                                End If
                            Case ObjektKarteneditor.EditorModi.Landschaften
                                If Selected < Objektverwalter.LandschaftenBilder.Length Then
                                    Objektverwalter.ToolTips = New ToolTip(Sprachconverter.Translate(Objektverwalter.LandschaftenBilder(Selected).Landschaftsname), Sprachconverter.GetToolTip(Objektverwalter.LandschaftenBilder(Selected).ID), ObjektMaus.GetCursorPosition)
                                Else
                                End If
                        End Select
                    End If
                End If
            End If
        Else
            Objektverwalter.ToolTips = Nothing
        End If
    End Sub
#End Region
    Public Overrides Sub MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Objektverwalter.Spielfeld.OnMap(Hauptmenue.SpielfeldPunkt) Then
            If My.Computer.Keyboard.ShiftKeyDown And (DataSettings.draw3D Or DataSettings._2D_3D_Malen) Then
                If Objektverwalter.Spielfeld IsNot Nothing Then
                    With Objektverwalter.Spielfeld
                        'Mit Steuerrung will man bestimmt zoomen!
                        If e.Delta > 0 Then
                            .KameraHoehe /= 1.1
                            'If .KameraHoehe < 5 Then .KameraHoehe = 5
                        Else
                            .KameraHoehe *= 1.1
                        End If
                        If .KameraHoehe > 420 Then .KameraHoehe = 420
                    End With
                End If
            Else
                Dim L As ObjektLandschaft = Objektverwalter.Spielfeld.Landschaften(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                If L.BildIDFest Then
                    If e.Delta > 0 Then
                        L.BildID += 1
                        If L.BildID >= Objektverwalter.LandschaftenBilder(L.ID).Texturen.Length Then
                            L.BildIDFest = False
                            L.UebergaengeAktualisieren(L.KooX, L.KooY, Objektverwalter.Spielfeld)
                        End If
                    Else
                        L.BildID -= 1
                        If L.BildID < 0 Then
                            L.BildIDFest = False
                            L.UebergaengeAktualisieren(L.KooX, L.KooY, Objektverwalter.Spielfeld)
                        End If
                    End If
                Else
                    L.BildIDFest = True
                    If e.Delta > 0 Then
                        L.BildID = 0
                    Else
                        L.BildID = Objektverwalter.LandschaftenBilder(L.ID).Texturen.Length - 1
                    End If
                End If
            End If
        End If
    End Sub

    Public Sub CreateRandomMap()
        Dim V As Integer = -1
        If IsNumeric(MessageBox.Output(0)) Then
            V = CInt(MessageBox.Output(0))
        End If
        Dim neuSpieler() As ObjektSpieler = {New ObjektSpieler(0, Hauptmenue.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)}
        For I = 0 To MessageBox.Output(1) - 1
            Dim Farbe As Color
            Dim I2 As Integer = I
            While I2 > Hauptmenue.AlleFarbtabellen.Length - 1
                I2 -= Hauptmenue.AlleFarbtabellen.Length - 1
            End While
            Farbe = Hauptmenue.AlleFarbtabellen(I2)
            Dim Armee As Armeen = 10
            I2 = I
            While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
            End While
            Armee = I2
            Dim Team As Objektverwalter.ABC
            I2 = I
            While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
            End While
            Team = I2
            Array.Resize(neuSpieler, neuSpieler.Length + 1)
            If I < Objektverwalter.Spielfeld.Spieler.Length - 1 Then
                neuSpieler(I + 1) = Objektverwalter.Spielfeld.Spieler(I + 1)
            Else
                If I = 0 Then
                    neuSpieler(I + 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
                Else
                    neuSpieler(I + 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
                End If
            End If
        Next

        Objektverwalter.ZufallskarteV2(MessageBox.Output(2), MessageBox.Output(3), neuSpieler, Objektverwalter.Spielfeld.Regeln, MessageBox.Output(4), V, CType(MessageBox.Output(5), List(Of Integer))(1) / 333, CType(MessageBox.Output(5), List(Of Integer))(2) / 333, CType(MessageBox.Output(5), List(Of Integer))(3) / 1000, CType(MessageBox.Output(5), List(Of Integer))(4) / 100)
    End Sub

    ''' <summary>
    ''' Erstellt eine neue Karte fuer den Editor
    ''' </summary>
    ''' <param name="Breite"></param>
    ''' <param name="Hoehe"></param>
    ''' <param name="Spieler"></param>
    ''' <param name="Farbtabellen"></param>
    ''' <remarks></remarks>
    Public Sub NeueKarte(ByVal Breite As Integer, ByVal Hoehe As Integer, ByVal Spieler As Integer, Optional ByVal Farbtabellen() As Color = Nothing)
        Dim neuSpieler() As ObjektSpieler = {New ObjektSpieler(0, Hauptmenue.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)}
        Dim AnzahlderArmeen As Integer = [Enum].GetNames(Armeen.AC.GetType).Length - 1
        For I = 0 To Spieler - 1
            Dim Farbe As Color
            Dim I2 As Integer = I
            If IsNothing(Farbtabellen) Then
                While I2 > Hauptmenue.AlleFarbtabellen.Length - 1
                    I2 -= Hauptmenue.AlleFarbtabellen.Length - 1
                End While
                Farbe = Hauptmenue.AlleFarbtabellen(I2)
            Else
                Farbe = Farbtabellen(I)
            End If
            Dim Armee As Armeen = 10
            I2 = I
            While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
            End While
            Armee = I2
            Dim Team As Objektverwalter.ABC
            I2 = I
            While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
            End While
            Team = I2
            Array.Resize(neuSpieler, neuSpieler.Length + 1)
            If I = 0 Then
                neuSpieler(neuSpieler.Length - 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
            Else
                neuSpieler(neuSpieler.Length - 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
            End If
        Next
        Objektverwalter.Spielfeld = Nothing
        Objektverwalter.Spielfeld = New ObjektSpielfeld(Breite, Hoehe, neuSpieler, LoadRule(DataSettings.CommanderWarsGameModus, Spieler))
        Objektverwalter.Zentrieren()
    End Sub
    ''' <summary>
    ''' Erstellt eine neue Karte fuer den Editor
    ''' </summary>
    ''' <param name="Breite"></param>
    ''' <param name="Hoehe"></param>
    ''' <param name="Spieler"></param>
    ''' <param name="Farbtabellen"></param>
    ''' <remarks></remarks>
    Public Sub Karteveraendern(ByVal Breite As Integer, ByVal Hoehe As Integer, ByVal Spieler As Integer, Optional ByVal Farbtabellen() As Color = Nothing)
        Dim Spielfeld As ObjektSpielfeld = Objektverwalter.Spielfeld
        Dim neuSpieler() As ObjektSpieler = {New ObjektSpieler(0, Hauptmenue.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)}
        Dim AnzahlderArmeen As Integer = [Enum].GetNames(Armeen.AC.GetType).Length - 1
        For I = 0 To Spieler - 1
            Dim Farbe As Color
            Dim I2 As Integer = I
            If IsNothing(Farbtabellen) Then
                While I2 > Hauptmenue.AlleFarbtabellen.Length - 1
                    I2 -= Hauptmenue.AlleFarbtabellen.Length - 1
                End While
                Farbe = Hauptmenue.AlleFarbtabellen(I2)
            Else
                Farbe = Farbtabellen(I)
            End If
            Dim Armee As Armeen = 10
            I2 = I
            While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
            End While
            Armee = I2
            Dim Team As Objektverwalter.ABC
            I2 = I
            While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
            End While
            Team = I2
            Array.Resize(neuSpieler, neuSpieler.Length + 1)
            If I < Objektverwalter.Spielfeld.Spieler.Length - 1 Then
                neuSpieler(I + 1) = Objektverwalter.Spielfeld.Spieler(I + 1)
            Else
                If I = 0 Then
                    neuSpieler(I + 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
                Else
                    neuSpieler(I + 1) = New ObjektSpieler(I + 1, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
                End If
            End If
        Next
        Objektverwalter.Spielfeld = Nothing
        Objektverwalter.Spielfeld = New ObjektSpielfeld(Breite, Hoehe, neuSpieler, New ObjektRegeln(False, neuSpieler.Length - 1, New ObjektRegeln.Siegbedingungen() {ObjektRegeln.Siegbedingungen.KeineHQs, ObjektRegeln.Siegbedingungen.KeineEinheiten}, True, New Integer() {70, 10, 10, 10}, , , , ))
        Objektverwalter.Spielfeld.Autor = Spielfeld.Autor
        Objektverwalter.Spielfeld.Beschreibung = Spielfeld.Beschreibung
        Objektverwalter.Spielfeld.Kartenname = Spielfeld.Kartenname
        Objektverwalter.Zentrieren()
        For X = 0 To Objektverwalter.Spielfeld.Breite - 1
            For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                If Spielfeld.OnMap(X, Y) Then
                    Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                    Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                End If
            Next
        Next
        For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
            For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                If IsNothing(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude) = False Then
                    If Objektverwalter.Spielfeld.OnMap(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude.Rechteck.X, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude.Rechteck.Y) Then
                        Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude.Rechteck.X, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude.Rechteck.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude
                        If G.Spieler < Objektverwalter.Spielfeld.Spieler.Length Then
                            If G.Rechteck.Width = Hauptmenue.Feldbreite And G.Rechteck.Height = Hauptmenue.Feldbreite * 2 Then
                            Else
                                If IsNothing(G) = False Then
                                    If Objektverwalter.KannSpezialGebaeudeplaziertwerden(G.Rechteck.X, G.Rechteck.Y) = False Then
                                        Objektverwalter.GebaeudeLoeschen(Hauptmenue.Rechteck.X, Hauptmenue.Rechteck.Y)
                                    End If
                                Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude = Nothing
                                End If
                            End If
                        Else
                            Objektverwalter.GebaeudeLoeschen(G.Rechteck.X, G.Rechteck.Y)
                        End If
                    End If
                Else
                    Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude = Nothing
                End If
            Next
        Next
    End Sub

    Public Sub CursorVerschieben(ByVal XVeraenderung As Integer, ByVal YVeraenderung As Integer)
        MusikEngine.LoadWav(DataSettings.Resourcenpfad + "Sound\Sound Effects\Overworld\Feld Wechsel.wav", False)
        If ((DataSettings._2D_3D_Malen Or DataSettings.draw3D) And (Hauptmenue.SpielfeldPunkt.X < 0 Or Hauptmenue.SpielfeldPunkt.Y < 0)) Then
            Hauptmenue.MoveCursorByKeyOutsideMap(XVeraenderung, YVeraenderung)
        Else
            Dim X As Integer = Hauptmenue.SpielfeldPunkt.X + XVeraenderung
            Dim Y As Integer = Hauptmenue.SpielfeldPunkt.Y + YVeraenderung
            X = X * Hauptmenue.Feldbreite : Y = Y * Hauptmenue.Feldbreite
            Hauptmenue.CursorPlazieren(X, Y)
        End If
    End Sub
    Public Overrides Sub IniMenue()
        Karteneditor = New ObjektKarteneditor()
    End Sub

    Public Overrides Sub SprachEingabe(ByVal Eingabe As String)
        Select Case Eingabe.ToLower
            Case "beenden"
                Hauptmenue.Ini(Hauptmenue.Formmodi.Hauptmenue)
            Case "abzug"
                KEModus = KEModi.Einheitabziehen
            Case "speichern"
                Dim Name As String = Objektverwalter.Spielfeld.Kartenname
                If Name = "" Then
                    Name = MessageBox.CurrentFile
                    If Name = "" Then
                        Name = DataSettings.Resourcenpfad + "Maps\" + "Karte.map"
                    End If
                    If Name.LastIndexOf("\") >= 0 Then
                        Name = Name.Remove(0, Name.LastIndexOf("\") + 1)
                    End If
                    If Name.IndexOf(".") >= 0 Then
                        Name = Name.Remove(Name.IndexOf("."))
                    End If
                End If
                Hauptmenue.Speichern(Name)
            Case "speichern unter"
                Hauptmenue.SpeichernUnterName()
            Case "laden"
                Hauptmenue.KarteLadenEditor()
            Case "abbrechen"
                Box = Nothing
                KEModus = KEModi.Nichts
            Case "neue karte"
                If MessageBox.ShowNewMap(True) = MsgBoxResult.Ok Then
                    NeueKarte(MessageBox.Output(1), MessageBox.Output(2), MessageBox.Output(0))
                    KEModus = KEModi.Nichts
                    Karteneditor.CursorRechteckesetzen()
                End If
            Case "zufallskarte see"
                Objektverwalter.ZufallskarteSee(Objektverwalter.Spielfeld.Breite, Objektverwalter.Spielfeld.Hoehe, Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Regeln)
            Case "zufallskarte"
                Objektverwalter.Zufallskarte(Objektverwalter.Spielfeld.Breite, Objektverwalter.Spielfeld.Hoehe, Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Regeln)
            Case "horizontal spiegeln"
                Objektverwalter.SpiegelnHorizontal()
            Case "vertikal spiegeln"
                Objektverwalter.SpiegelnVertikal()
        End Select
    End Sub

    Public Sub EinheitenVeraenderungsBoxErschaffen(ByVal X As Integer, ByVal Y As Integer)
        If MessageBox.ShowBoxChangeUnit(X, Y) = MsgBoxResult.Ok Then
            EinheitVeraendern(X, Y)
        End If
    End Sub
    Public Sub EinheitVeraendern(ByVal X As Integer, ByVal Y As Integer)
        If Not Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) Is Nothing Then
            Dim Ladung As ObjektEinheit() = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Ladung
            Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = ObjektLadeklasse.NewEinheit(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).EinheitenID, MessageBox.Output(1) * 10, MessageBox.Output(3), MessageBox.Output(2), MessageBox.Output(0), False, X, Y, False, False)


            Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).TruppenStufe = [Enum].Parse(ObjektEinheit.Stufe.General.GetType, MessageBox.Output(5))
            Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Rotation = MessageBox.Output(4) * 2 * Math.PI / 360
            Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).AIUse = [Enum].Parse(ObjektEinheit.AISetting.Standard.GetType, MessageBox.Output(6))

            Dim Spieler As Integer = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Spieler
            For I = 0 To Ladung.Length - 1
                If Ladung(I) IsNot Nothing Then
                    Ladung(I).Spieler = Spieler
                End If
            Next
            Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Ladung = Ladung
            If Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).TruppenStufe = ObjektEinheit.Stufe.KO Then
                For Each E In Objektverwalter.Spielfeld.Einheiten
                    If Not E Is Nothing Then
                        If E.X = X And E.Y = Y And E.GetMap = Objektverwalter.Spielfeld.MomentaneSchlacht Then
                        Else
                            If E.EinheitenStufe = ObjektEinheit.Stufe.KO Then
                                If E.Spieler = MessageBox.Output(0) Then
                                    E.TruppenStufe = ObjektEinheit.Stufe.Veteran
                                End If
                            End If
                        End If
                    End If
                Next
            End If
        ElseIf Not Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude Is Nothing Then
            ' Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude
        End If
        KEModus = KEModi.EinheitenWerteVeraendern
    End Sub
    Private Sub SchlachtWechsel()
        Objektverwalter.Spielfeld.SchlachtWechseln()
        'wir muessen noch fuer die richtige Cursorposition sorgen.
        Dim e As New System.Windows.Forms.MouseEventArgs(MouseButtons.Left, 1, Karteneditor.CursorRechteck(1).X + 1, Karteneditor.CursorRechteck(1).Y + 1, 0)
        Karteneditor.MouseDown(e, Me)
    End Sub

    ''' <summary>
    ''' Gibt die Spieler zurueck die Einheiten, Gebaeude auf der Karte haben.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function CheckExistingPlayers() As Boolean()
        Dim Player(Objektverwalter.Spielfeld.Spieler.Length - 1) As Boolean
        Dim Schlacht As Integer = 0
        If Objektverwalter.Spielfeld.Regeln.Luftschlacht Then Schlacht = 1
        For I = 0 To Schlacht
            For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, I).Gebaeude
                    If Not G Is Nothing Then
                        Player(G.Spieler) = True
                    End If
                    Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(X, Y, I)
                    If Not E Is Nothing Then
                        Player(E.Spieler) = True
                    End If
                Next
            Next
        Next
        Return Player
    End Function
    ''' <summary>
    ''' Loescht alle Spieler, die keine Einheiten oder Gebaeude auf dem Spielfeld haben
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Sub OptimizePlayerNumber()
        'Variablen erstellen
        Dim Player As Boolean() = CheckExistingPlayers()
        Dim Schlacht As Integer = 0
        If Objektverwalter.Spielfeld.Regeln.Luftschlacht Then Schlacht = 1
        Dim Loeschen As Integer = 0
        For I = 1 To Player.Length - 1
            If Player(I) = False Then
                Loeschen += 1
            End If
        Next
        'Spieler loeschen
        For I = 1 To Player.Length - 1
            If Player(I) = False Then
                'Dieser Spieler existiert nicht also wird er geloescht
                Dim NaechsterMitSpieler As Integer = I + 1
                If NaechsterMitSpieler < Player.Length Then
                    While Player(NaechsterMitSpieler) = False
                        NaechsterMitSpieler += 1
                        If NaechsterMitSpieler >= Player.Length Then
                            Exit For 'Wir sind zu weit ab nach unten
                        End If
                    End While
                    'Spieler ueberschreiben und loeschen
                    Objektverwalter.Spielfeld.Spieler(I) = Objektverwalter.Spielfeld.Spieler(NaechsterMitSpieler)
                    Objektverwalter.Spielfeld.Spieler(I).Spieler = I
                    For I2 = 0 To Schlacht
                        For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                            For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                                Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, I2).Gebaeude
                                If Not G Is Nothing Then
                                    If G.Spieler = NaechsterMitSpieler Then
                                        G.Spieler = I
                                    End If
                                End If
                                Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(X, Y, I2)
                                If Not E Is Nothing Then
                                    If E.Spieler = NaechsterMitSpieler Then
                                        E.Spieler = I
                                    End If
                                End If
                            Next
                        Next
                    Next
                    'Noch zu loeschende Spieler senken
                    Player(NaechsterMitSpieler) = False
                End If
            End If
        Next  'Hier springen wir hin wenn wir oben am Ende sind
        Array.Resize(Objektverwalter.Spielfeld.Spieler, Objektverwalter.Spielfeld.Spieler.Length - Loeschen)
        If Hauptmenue.Formmodus = Hauptmenue.Formmodi.Editor Then
            Dim K As ObjektKarteneditormenue = Objektverwalter.Menue
            K.ChangeSpielerAuswahl(0)
        End If

    End Sub

    Public Overrides Sub ChangeWindowSize(ByVal PosChange As System.Drawing.Point)
        Dim KModus As KEModi = KEModus
        MyBase.ChangeWindowSizeObjekte(PosChange)
        Taskleiste.ChangeWindowSize(PosChange)
        Karteneditor.ChangeWindowSize(PosChange)
        KEModus = KModus
        Select Case KEModus
            Case KEModi.Box
                KEModus = KEModi.Nichts
                Box = Nothing
        End Select
    End Sub

    Private Class ChangeTileSetDirection
        Dim ButtonPlatz As Integer = Hauptmenue.Feldbreite + 4
        Dim Landschaft As ObjektLandschaft
        Dim NeueID As Integer = -1
        Dim NeueUebergangsIDs() As Integer = {}
        Dim LandschaftenInDerBreite As Integer
        Dim LandschaftenInDerHoehe As Integer
        Dim Rechteck As Rectangle
        Dim Buttons(1) As ObjektButton
        Dim UesIDs As New Stack(Of String)
        Dim CheckBoxen As New Stack(Of ObjektCheckBox)
        Public Sub New(ByVal Landschaft As ObjektLandschaft)
            Me.Landschaft = Landschaft
            Dim R As Integer
            Rechteck = New Rectangle(Hauptmenue.Rechteck.Width / 4, Hauptmenue.Rechteck.Height / 4, 0, 0)
            LandschaftenInDerBreite = Math.DivRem(CInt(Hauptmenue.Rechteck.Width / 2), ButtonPlatz, R)
            Dim LZahl As Integer = Objektverwalter.LandschaftenBilder(Me.Landschaft.ID).Texturen.Length + 1
            LandschaftenInDerHoehe = Math.DivRem(LZahl, LandschaftenInDerBreite, R)
            If R > 0 Then LandschaftenInDerHoehe += 1
            Rechteck.Width = LandschaftenInDerBreite * ButtonPlatz + 30
            '30 Fuer die beiden Buttons!
            If Objektverwalter.LandschaftenBilder(Landschaft.ID).Uebergaenge.Length > 0 Then
                If Objektverwalter.LandschaftenBilder(Landschaft.ID).UebergangsModus = ObjektLandschaftsTextur.Uebergangsmodi.Strand Then
                    Rechteck.Height = ButtonPlatz * LandschaftenInDerHoehe + 30 + 100
                    Dim Ues() As String = Objektverwalter.LandschaftenBilder(Landschaft.ID).Uebergangfunktion
                    If Ues.Contains("NW") Then
                        UesIDs.Push("NW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("NO") Then
                        UesIDs.Push("NO")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("ON") Then
                        UesIDs.Push("ON")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 - ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("OS") Then
                        UesIDs.Push("OS")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 + ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("SO") Then
                        UesIDs.Push("SO")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))

                    End If
                    If Ues.Contains("SW") Then
                        UesIDs.Push("SW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz / 2, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("WN") Then
                        UesIDs.Push("WN")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 - ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("WS") Then
                        UesIDs.Push("WS")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9 + ButtonPlatz / 2), "CheckBox", New PointF, False))
                    End If
                Else
                    Rechteck.Height = ButtonPlatz * LandschaftenInDerHoehe + 30 + 100
                    Dim Ues() As String = Objektverwalter.LandschaftenBilder(Landschaft.ID).Uebergangfunktion
                    If Ues.Contains("N") Then
                        UesIDs.Push("N")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("S") Then
                        UesIDs.Push("S")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("O") Then
                        UesIDs.Push("O")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("W") Then
                        UesIDs.Push("W")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - 9), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("NW") Then
                        UesIDs.Push("NW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("NO") Then
                        UesIDs.Push("NO")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 40 - ButtonPlatz - 18), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("OS") Then
                        UesIDs.Push("OS")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 + ButtonPlatz, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                    If Ues.Contains("SW") Then
                        UesIDs.Push("SW")
                        CheckBoxen.Push(New ObjektCheckBox(New Point(Rechteck.X + Rechteck.Width / 2 - 9 - ButtonPlatz, Rechteck.Y + Rechteck.Height - 28), "CheckBox", New PointF, False))
                    End If
                End If
            Else
                Rechteck.Height = ButtonPlatz * LandschaftenInDerHoehe + 100
            End If

            Dim B As Image = Image.FromFile(DataSettings.Resourcenpfad + "Objects\Button.png")
            Buttons(0) = New ObjektButton(Rechteck.X + 10, Rechteck.Y + Rechteck.Height - 30, B, "Aendern", "Button", New PointF(0.5#, 0.5#))
            Buttons(1) = New ObjektButton(Rechteck.X + Rechteck.Width - 120, Rechteck.Y + Rechteck.Height - 30, B, "Abbrechen!", "Button", New PointF(0.5#, 0.5#))
            'Werte holen
            NeueID = Landschaft.BildID
            Dim UeIDSString() As String = UesIDs.ToArray
            For I = 0 To Landschaft.UebergangsIDS.Length - 1
                Dim A As String = Objektverwalter.LandschaftenBilder(Landschaft.ID).Uebergangfunktion((Landschaft.UebergangsIDS(I)))
                CheckBoxen(Array.IndexOf(UeIDSString, A)).Checked = True
            Next
        End Sub
        ''' <summary>
        ''' Erstellt die Landschaft Neu!
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub CreateChanges()
            If NeueID < 0 Then
                Landschaft.BildIDFest = False
                Landschaft.UebergaengeAktualisieren(Landschaft.KooX, Landschaft.KooY, Objektverwalter.Spielfeld)
            Else
                Landschaft.BildIDFest = True
                Landschaft.BildID = NeueID
                Landschaft.UebergangsIDS = NeueUebergangsIDs
            End If
        End Sub
        ''' <summary>
        ''' Wir malen mal diesen Punkt! 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub Malen()
            Dim sngrotation As Single = 0
            Dim intcolor As Color = Color.FromArgb(180, 255, 255, 255)
            Grafikengine.DrawBox(TexturenHalter.GetBoxHintergrund(0), Rechteck.Location, New Size(144, 145), Rechteck.Size, 5, intcolor)
            'So die Box steht jetzt die Tilesets
            Dim LTexturen As Texture() = Objektverwalter.LandschaftenBilder(Landschaft.ID).Texturen
            Grafikengine.ptfPosition = Rechteck.Location + New Point(10, 10)
            Grafikengine.recBild = Nothing
            Grafikengine.ptfRotCenter = Nothing
            Grafikengine.szfScale = New Size(Hauptmenue.Feldbreite, Hauptmenue.Feldbreite)
            For Y = 0 To LandschaftenInDerHoehe - 1
                For X = 0 To LandschaftenInDerBreite - 1
                    Dim Stelle As Integer = X + Y * LandschaftenInDerBreite
                    If Stelle < LTexturen.Length Then
                        If Objektverwalter.LandschaftenBilder(Landschaft.ID).Frame Then
                            Grafikengine.recBild.X = 0
                            Grafikengine.recBild.Y = 0
                            Grafikengine.recBild.Width = Hauptmenue.Feldbreite
                            Grafikengine.recBild.Height = Hauptmenue.Feldbreite
                        Else
                            Grafikengine.recBild = Nothing
                        End If
                        If Landschaft.Gross Then
                            Grafikengine.recBild.X = 0
                            Grafikengine.recBild.Y = 0
                            Grafikengine.recBild.Width = Hauptmenue.Feldbreite
                            Grafikengine.recBild.Height = Hauptmenue.Feldbreite * 2
                            Grafikengine.ptfPosition.Y -= Hauptmenue.Feldbreite
                            Grafikengine.szfScale.Height = Hauptmenue.Feldbreite * 2
                            Grafikengine.Sprite.Draw2D(LTexturen(Stelle), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                            If Objektverwalter.LandschaftenBilder(Landschaft.ID).Frame Then
                                Grafikengine.recBild.X = 0
                                Grafikengine.recBild.Y = 0
                                Grafikengine.recBild.Width = Hauptmenue.Feldbreite
                                Grafikengine.recBild.Height = Hauptmenue.Feldbreite
                            Else
                                Grafikengine.recBild = Nothing
                            End If
                            Grafikengine.szfScale.Height = Hauptmenue.Feldbreite
                            Grafikengine.ptfPosition.Y += Hauptmenue.Feldbreite
                        Else
                            Grafikengine.Sprite.Draw2D(LTexturen(Stelle), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        End If



                        If Stelle = NeueID Then
                            Grafikengine.szfScale = New Size(Hauptmenue.Feldbreite, Hauptmenue.Feldbreite)
                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetDropDownItemTexturen(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        End If
                    Else
                        Grafikengine.recBild = New Rectangle(18, 0, 18, 18)
                        Grafikengine.szfScale = New Size(Hauptmenue.Feldbreite, Hauptmenue.Feldbreite)
                        Grafikengine.Sprite.Draw2D(TexturenHalter.GetKreuzHakenTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        If NeueID < 0 Then
                            Grafikengine.recBild = Nothing

                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetDropDownItemTexturen(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        End If
                        Exit For
                    End If
                    Grafikengine.ptfPosition.X += ButtonPlatz
                Next
                Grafikengine.ptfPosition.Y += ButtonPlatz
                Grafikengine.ptfPosition.X = Rechteck.X + 10
            Next
            If NeueID >= 0 Then
                If Objektverwalter.LandschaftenBilder(Landschaft.ID).Frame Then
                    Grafikengine.recBild.X = 0
                    Grafikengine.recBild.Y = 0
                    Grafikengine.recBild.Width = Hauptmenue.Feldbreite
                    Grafikengine.recBild.Height = Hauptmenue.Feldbreite
                Else
                    Grafikengine.recBild = Nothing
                End If
                Grafikengine.ptfPosition.X = Rechteck.X + Rechteck.Width / 2 - Hauptmenue.Feldbreite / 2
                Grafikengine.ptfPosition.Y = Rechteck.Y + Rechteck.Height - 20 - ButtonPlatz - Hauptmenue.Feldbreite / 2
                Grafikengine.Sprite.Draw2D(LTexturen(NeueID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).Malen()
                Next
            End If
            For I = 0 To Buttons.Length - 1
                Buttons(I).Malen()
            Next
        End Sub
        Public Sub MouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
            For I = 0 To Buttons.Length - 1
                Buttons(I).MouseEnter(e.X, e.Y)
            Next
            If NeueID >= 0 Then
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).MouseEnter(e.X, e.Y)
                Next
            End If
        End Sub
        Public Sub MouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
            For I = 0 To Buttons.Length - 1
                Buttons(I).MouseDown(e.X, e.Y)
            Next
            If NeueID >= 0 Then
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).MouseDown(e.X, e.Y)
                Next
            End If
            'Haben wir auf ein Landschaftsfeld geklickt?
            Dim R As Rectangle = New Rectangle(Rechteck.X + 10, Rechteck.Y + 10, Hauptmenue.Feldbreite, Hauptmenue.Feldbreite)
            Dim LIDZahl As Integer = Objektverwalter.LandschaftenBilder(Landschaft.ID).Texturen.Length
            For Y = 0 To LandschaftenInDerHoehe - 1
                For X = 0 To LandschaftenInDerBreite - 1
                    Dim Stelle As Integer = X + Y * LandschaftenInDerBreite
                    If Stelle < LIDZahl Then
                        If R.Contains(e.Location) Then
                            NeueID = Stelle
                            Exit Sub
                        End If
                    Else
                        If R.Contains(e.Location) Then
                            NeueID = -1
                        End If
                        Exit Sub
                    End If
                    R.X += ButtonPlatz
                Next
                R.Y += ButtonPlatz
                R.X = Rechteck.X + 10
            Next

        End Sub
        Public Function MouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) As String
            Dim F As String = ""
            For I = 0 To Buttons.Length - 1
                F = Buttons(I).MouseUp(e.X, e.Y)
                If F.ToLower = "aendern" Then
                    CreateUeIDs()
                End If
                If F <> "" Then Return F
            Next
            If NeueID >= 0 Then
                For I = 0 To CheckBoxen.Count - 1
                    CheckBoxen(I).MouseUp(e.X, e.Y)
                Next
            End If
            Return F
        End Function
        Private Sub CreateUeIDs()
            Dim NeuUeIDs As New Stack(Of Integer)
            Dim UeIds As String() = Objektverwalter.LandschaftenBilder(Landschaft.ID).Uebergangfunktion
            For I = 0 To CheckBoxen.Count - 1
                If CheckBoxen(I).Checked = True Then
                    NeuUeIDs.Push(Array.IndexOf(UeIds, UesIDs(I)))
                End If
            Next
            NeueUebergangsIDs = NeuUeIDs.ToArray
        End Sub
    End Class
    ''' <summary>
    ''' Checks if all Player have a Building or Unit.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function IsMapPlayable() As Boolean
        Dim Player As Boolean() = CheckExistingPlayers()
        Dim NichtExistent As Integer = 0
        For I = 1 To Player.Length - 1
            If Player(I) = False Then
                Return False
            End If
        Next
        Return True
    End Function
    Private Sub CheckMap()
        If Not IsMapPlayable() Then
            Cursor.Show()
            If MessageBox.ShowMessageBox("This Map contains to much players! Do you want to delete all superfical players?", MsgBoxStyle.YesNo, "Player Number") = MsgBoxResult.Yes Then
                OptimizePlayerNumber()
            End If
            Cursor.Hide()
        End If
    End Sub
    Private Sub SaveMap()
        CheckMap()
        Dim Name As String = MessageBox.CurrentFile
        If Name = "" Then
            Name = DataSettings.Resourcenpfad + "Maps\" + "Karte.map"
        End If
        If Name.LastIndexOf("\") >= 0 Then
            Name = Name.Remove(0, Name.LastIndexOf("\") + 1)
        End If
        If Name.IndexOf(".") >= 0 Then
            Name = Name.Remove(Name.IndexOf("."))
        End If
        Hauptmenue.Speichern(Name)
    End Sub

    ''' <summary>
    ''' Resets the Fill Mode
    ''' </summary>
    ''' <param name="NewMode"></param>
    ''' <remarks></remarks>
    Private Sub ChangeFillMode(ByVal NewMode As FillModi)
        FillMode = NewMode
        P1 = New Point(-1, -1)
        P2 = New Point(-1, -1)
        Objektverwalter.MarkierteFelder.Clear()
    End Sub
    ''' <summary>
    ''' Fuellt ein Rechteck mit bestimmten Terrain aus.
    ''' Keine Spezialgebaeude...
    ''' </summary>
    ''' <param name="P1"></param>
    ''' <param name="P2"></param>
    ''' <remarks></remarks>
    Public Sub DrawRectancle(ByVal P1 As Point, ByVal P2 As Point)
        If P1.X > P2.X Then
            Dim X As Integer = P2.X
            P2.X = P1.X
            P1.X = X
        End If
        If P1.Y > P2.Y Then
            Dim y As Integer = P2.Y
            P2.Y = P1.Y
            P1.Y = y
        End If
        Dim Gebaeudeinstanz As ObjektGebaeude = Nothing
        Select Case KEModus
            Case KEModi.Gebaeudeplazieren
                Gebaeudeinstanz = ObjektLadeklasse.NewGebaeude(Objektverwalter.AlleGebaeude(Objektverwalter.GebaeudeTextur.GetGebaeudeID(Karteneditor.AktuelleGebaeude, Karteneditor.MomenentanerSpieler)).GebaeudeID, Karteneditor.MomenentanerSpieler, -10, -10, Nothing)
        End Select
        For X = P1.X To P2.X
            For Y = P1.Y To P2.Y
                Select Case KEModus
                    Case KEModi.Einheitplazieren
                        Objektverwalter.Einheitplazieren(X, Y)
                    Case KEModi.Landschaftplazieren
                        Objektverwalter.Landschaftplazieren(X, Y, False)
                    Case KEModi.Gebaeudeplazieren
                        Objektverwalter.Gebaeudeplazieren(X, Y, Gebaeudeinstanz)
                End Select
            Next
        Next
        Objektverwalter.UebergaengeAktualiesieren()
    End Sub
    ''' <summary>
    ''' Fuellt ein Rechteck mit bestimmten Terrain aus.
    ''' Keine Spezialgebaeude...
    ''' </summary>
    ''' <param name="P1"></param>
    ''' <param name="P2"></param>
    ''' <remarks></remarks>
    Public Sub DrawLine(ByVal P1 As Point, ByVal P2 As Point)
        If P1.X > P2.X Then
            Dim X As Integer = P2.X
            Dim Y As Integer = P2.Y
            P2.X = P1.X
            P2.Y = P1.Y
            P1.X = X
            P1.Y = Y
        End If
        Dim Gebaeudeinstanz As ObjektGebaeude = Nothing
        Select Case KEModus
            Case KEModi.Gebaeudeplazieren
                Gebaeudeinstanz = ObjektLadeklasse.NewGebaeude(Objektverwalter.AlleGebaeude(Objektverwalter.GebaeudeTextur.GetGebaeudeID(Karteneditor.AktuelleGebaeude, Karteneditor.MomenentanerSpieler)).GebaeudeID, Karteneditor.MomenentanerSpieler, -10, -10, Nothing)
        End Select
        If P1.X = P2.X Then
            If P1.Y > P2.Y Then
                Dim y As Integer = P2.Y
                P2.Y = P1.Y
                P1.Y = y
            End If
            For Y = P1.Y To P2.Y
                Select Case KEModus
                    Case KEModi.Einheitplazieren
                        Objektverwalter.Einheitplazieren(P1.X, Y)
                    Case KEModi.Landschaftplazieren
                        Objektverwalter.Landschaftplazieren(P1.X, Y, False)
                    Case KEModi.Gebaeudeplazieren
                        Objektverwalter.Gebaeudeplazieren(P1.X, Y, Gebaeudeinstanz)
                End Select
            Next
        Else
            Dim LastLineY As Integer = -1
            For X = P1.X To P2.X
                Dim M As Double = (P1.Y - P2.Y) / (P1.X - P2.X)
                If M > 1 Or M < -1 Then
                    Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                    Select Case KEModus
                        Case KEModi.Einheitplazieren
                            Objektverwalter.Einheitplazieren(X, Y)
                        Case KEModi.Landschaftplazieren
                            Objektverwalter.Landschaftplazieren(X, Y, False)
                        Case KEModi.Gebaeudeplazieren
                            Objektverwalter.Gebaeudeplazieren(X, Y, Gebaeudeinstanz)
                    End Select
                    If LastLineY < 0 Then LastLineY = P1.Y
                    Dim Y1 As Integer = LastLineY
                    If LastLineY < Y Then
                        Y1 = Y
                        Y = LastLineY
                        LastLineY = Y1
                    Else
                        LastLineY = Y
                    End If
                    For Y2 = Y + 1 To Y1 - 1
                        Select Case KEModus
                            Case KEModi.Einheitplazieren
                                Objektverwalter.Einheitplazieren(X, Y2)
                            Case KEModi.Landschaftplazieren
                                Objektverwalter.Landschaftplazieren(X, Y2, False)
                            Case KEModi.Gebaeudeplazieren
                                Objektverwalter.Gebaeudeplazieren(X, Y2, Gebaeudeinstanz)
                        End Select
                    Next
                Else
                    Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                    Select Case KEModus
                        Case KEModi.Einheitplazieren
                            Objektverwalter.Einheitplazieren(X, Y)
                        Case KEModi.Landschaftplazieren
                            Objektverwalter.Landschaftplazieren(X, Y, False)
                        Case KEModi.Gebaeudeplazieren
                            Objektverwalter.Gebaeudeplazieren(X, Y, Gebaeudeinstanz)
                    End Select
                End If
            Next
        End If
        Objektverwalter.UebergaengeAktualiesieren()
    End Sub
    ''' <summary>
    ''' Fuellt ein Rechteck mit bestimmten Terrain aus.
    ''' Keine Spezialgebaeude...
    ''' </summary>
    ''' <param name="P1"></param>
    ''' <param name="P2"></param>
    ''' <remarks></remarks>
    Public Sub DrawEllipse(ByVal P1 As Point, ByVal P2 As Point)
        If P1.X > P2.X Then
            Dim X As Integer = P2.X
            P2.X = P1.X
            P1.X = X
        End If
        If P1.Y > P2.Y Then
            Dim y As Integer = P2.Y
            P2.Y = P1.Y
            P1.Y = y
        End If

        Dim Gebaeudeinstanz As ObjektGebaeude = Nothing
        Select Case KEModus
            Case KEModi.Gebaeudeplazieren
                Gebaeudeinstanz = ObjektLadeklasse.NewGebaeude(Objektverwalter.AlleGebaeude(Objektverwalter.GebaeudeTextur.GetGebaeudeID(Karteneditor.AktuelleGebaeude, Karteneditor.MomenentanerSpieler)).GebaeudeID, Karteneditor.MomenentanerSpieler, -10, -10, Nothing)
        End Select
        'Grosse Halbachse
        Dim HGross As Integer = Math.Abs((P2.X - P1.X) / 2)
        'Kleine Halbachse
        Dim HKlein As Integer = Math.Abs((P2.Y - P1.Y) / 2)
        'mittelpunkt der Brennpunkte...
        Dim MPunkt As New Point(P1.X + HGross, P1.Y + HKlein)

        If HGross > 0 Then
            For X = 0 To HGross
                Dim XHilfe As Double = -HGross + X
                If X = 0 Then XHilfe += 0.5#
                'Der Winkel Alpha (Ritzsche Achsenkonstruktion)
                Dim YMax As Integer = Math.Sqrt(HKlein * HKlein - ((HKlein * HKlein) / (HGross * HGross)) * XHilfe * XHilfe)
                For Y = -YMax To YMax
                    Select Case KEModus
                        Case KEModi.Einheitplazieren
                            Objektverwalter.Einheitplazieren(P1.X + X, Y + MPunkt.Y)
                            Objektverwalter.Einheitplazieren(P2.X - X, Y + MPunkt.Y)
                        Case KEModi.Landschaftplazieren
                            Objektverwalter.Landschaftplazieren(P1.X + X, Y + MPunkt.Y, False)
                            Objektverwalter.Landschaftplazieren(P2.X - X, Y + MPunkt.Y, False)
                        Case KEModi.Gebaeudeplazieren
                            Objektverwalter.Gebaeudeplazieren(P1.X + X, Y + MPunkt.Y, Gebaeudeinstanz)
                            Objektverwalter.Gebaeudeplazieren(P2.X - X, Y + MPunkt.Y, Gebaeudeinstanz)
                    End Select
                Next
            Next
        End If
        Objektverwalter.UebergaengeAktualiesieren()
    End Sub
    ''' <summary>
    ''' Marks the filled Fields
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub MarkFields(ByVal P1 As Point, ByVal P2 As Point)
        If FillMode > FillModi.None Then
            If P1.X >= 0 Then
                If Objektverwalter.Spielfeld.OnMap(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y) Then
                    If Hauptmenue.SpielfeldPunkt <> P2 Then
                        P2 = Hauptmenue.SpielfeldPunkt
                        Objektverwalter.MarkierteFelder.Clear()
                        Select Case FillMode
                            Case FillModi.Rectancle
                                If P1.X > P2.X Then
                                    Dim X As Integer = P2.X
                                    P2.X = P1.X
                                    P1.X = X
                                End If
                                If P1.Y > P2.Y Then
                                    Dim y As Integer = P2.Y
                                    P2.Y = P1.Y
                                    P1.Y = y
                                End If
                                For X = P1.X To P2.X
                                    For Y = P1.Y To P2.Y
                                        Objektverwalter.neuMarkiertesFeld(X, Y, Color.Red, "Rot")
                                    Next
                                Next
                            Case FillModi.Line
                                If P1.X > P2.X Then
                                    Dim X As Integer = P2.X
                                    Dim Y As Integer = P2.Y
                                    P2.X = P1.X
                                    P2.Y = P1.Y
                                    P1.X = X
                                    P1.Y = Y
                                End If
                                If P1.X = P2.X Then
                                    If P1.Y > P2.Y Then
                                        Dim y As Integer = P2.Y
                                        P2.Y = P1.Y
                                        P1.Y = y
                                    End If
                                    For Y = P1.Y To P2.Y
                                        Objektverwalter.neuMarkiertesFeld(P1.X, Y, Color.Red, "Rot")
                                    Next
                                Else
                                    Dim LastLineY As Integer = -1
                                    For X = P1.X To P2.X
                                        Dim M As Double = (P1.Y - P2.Y) / (P1.X - P2.X)
                                        If M > 1 Or M < -1.0# Then
                                            If LastLineY < 0 Then LastLineY = P1.Y
                                            Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                                            Objektverwalter.neuMarkiertesFeld(X, Y, Color.Red, "Rot")
                                            Dim Y1 As Integer = LastLineY
                                            If LastLineY < Y Then
                                                Y1 = Y
                                                Y = LastLineY
                                                LastLineY = Y1
                                            Else
                                                LastLineY = Y
                                            End If
                                            For Y2 = Y + 1 To Y1 - 1
                                                Objektverwalter.neuMarkiertesFeld(X, Y2, Color.Red, "Rot")
                                            Next

                                        Else
                                            Dim Y As Integer = (M * X) + P1.Y - (M * P1.X)
                                            Objektverwalter.neuMarkiertesFeld(X, Y, Color.Red, "Rot")
                                        End If
                                    Next
                                End If
                            Case FillModi.Ellipse
                                If P1 = P2 Then
                                    Objektverwalter.neuMarkiertesFeld(P1.X, P1.Y, Color.Red, "Rot")
                                Else
                                    If P1.X > P2.X Then
                                        Dim X As Integer = P2.X
                                        P2.X = P1.X
                                        P1.X = X
                                    End If
                                    If P1.Y > P2.Y Then
                                        Dim y As Integer = P2.Y
                                        P2.Y = P1.Y
                                        P1.Y = y
                                    End If
                                    'Grosse Halbachse
                                    Dim HGross As Integer = Math.Abs((P2.X - P1.X) / 2)
                                    'Kleine Halbachse
                                    Dim HKlein As Integer = Math.Abs((P2.Y - P1.Y) / 2)
                                    'mittelpunkt der Brennpunkte...
                                    Dim MPunkt As New Point(P1.X + HGross, P1.Y + HKlein)
                                    If HGross = 0 Then HGross = 1
                                    For X = 0 To HGross
                                        Dim XHilfe As Double = -HGross + X
                                        If X = 0 Then XHilfe += 0.5#
                                        'Der Winkel Alpha (Ritzsche Achsenkonstruktion)
                                        Dim YMax As Integer = Math.Sqrt(Math.Abs(HKlein * HKlein - ((HKlein * HKlein) / (HGross * HGross)) * XHilfe * XHilfe))
                                        For Y = -YMax To YMax
                                            Objektverwalter.neuMarkiertesFeld(P1.X + X, Y + MPunkt.Y, Color.Red, "Rot")
                                            Objektverwalter.neuMarkiertesFeld(P2.X - X, Y + MPunkt.Y, Color.Red, "Rot")
                                        Next
                                    Next
                                End If
                        End Select
                    End If
                End If
            End If
        End If
    End Sub
    ''' <summary>
    ''' Fills the Fields
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub SetPointAndFill()
        If Objektverwalter.Spielfeld.OnMap(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y) Then
            If P1.X >= 0 Then
                P2 = Hauptmenue.SpielfeldPunkt
                Select Case FillMode
                    Case FillModi.Ellipse
                        DrawEllipse(P1, P2)
                    Case FillModi.Line
                        DrawLine(P1, P2)
                    Case FillModi.Rectancle
                        DrawRectancle(P1, P2)
                End Select
                P1 = New Point(-1, -1)
                P2 = New Point(-1, -1)
                Objektverwalter.MarkierteFelder.Clear()
            Else
                P1 = Hauptmenue.SpielfeldPunkt
            End If
        End If
    End Sub

    Public Overrides Sub Reset()
        MyBase.Reset()
        Karteneditor.Reset()
    End Sub
#Region "Advance Wars Map Importer and Exporter"
    ''' <summary>
    ''' Diese Sub Importiert eine AWDS-Karte des AWS-Map-Editors von Joao Pedro S. Francese
    ''' </summary>
    ''' <param name="File"></param>
    ''' <remarks></remarks>
    Public Shared Sub ImportAWSMap(ByVal File As String)
        Dim Zeichen(0) As Char
        Using Reader As New IO.FileStream(File, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
            'Zuerst mal den Start weglesen brauchen wir nicht!
            For I = 0 To 9
                'Hier steht nur es ist eine AW-Karte
                Reader.ReadByte()
            Next
            Dim Breite As Integer = Reader.ReadByte()
            Dim Hoehe As Integer = Reader.ReadByte()
            Dim Spieler As ObjektSpieler() = {}
            'Dauert ohne laenger aber die Farben stimmen!  
            'If Not Objektverwalter.Spielfeld Is Nothing Then
            '    Spieler = Objektverwalter.Spielfeld.Spieler
            'End If
            If Spieler.Length < 6 Then
                Dim SpielerZahl As Integer = Spieler.Length
                Array.Resize(Spieler, 6)
                For I = SpielerZahl To 5
                    If I = 0 Then
                        Spieler(0) = New ObjektSpieler(0, Hauptmenue.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)
                    Else
                        Dim Farbe As Color
                        Dim I2 As Integer = I - 1
                        While I2 > Hauptmenue.AlleFarbtabellen.Length - 1
                            I2 -= Hauptmenue.AlleFarbtabellen.Length - 1
                        End While
                        Farbe = Hauptmenue.AlleFarbtabellen(I2)
                        Dim Armee As Armeen = 10
                        I2 = I - 1
                        While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                            I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
                        End While
                        Armee = I2
                        Dim Team As Objektverwalter.ABC
                        I2 = I - 1
                        While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                            I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
                        End While
                        Team = I2
                        If I = 1 Then
                            Spieler(I) = New ObjektSpieler(I, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
                        Else
                            Spieler(I) = New ObjektSpieler(I, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
                        End If
                    End If
                Next
            ElseIf Spieler.Length > 6 Then
                Array.Resize(Spieler, 6)
            End If
            'Neutrales Team festlegen
            Spieler(0).Team = "q"
            Objektverwalter.Spielfeld = New ObjektSpielfeld(Breite, Hoehe, Spieler, LoadRule(DataSettings.CommanderWarsGameModus, Spieler.Length - 1))
            'eine Zeile weiter
            Reader.ReadByte() 'Hier steht der Terrain style
            Dim FeldBezug1 As Integer = -1
            Dim FeldBezug2 As Integer = -1
            'Jetzt kommen die Landschaften und Gebaeude dran
            For X = 0 To Breite - 1
                For Y = 0 To Hoehe - 1
                    FeldBezug1 = Reader.ReadByte
                    FeldBezug2 = Reader.ReadByte
                    Select Case FeldBezug1
                        Case 0 'Ebene
                            Select Case FeldBezug2
                                Case 4 'Monolith
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude = ObjektLadeklasse.NewGebaeude("MONOLITH", 5, X, Y, , Objektverwalter.Spielfeld)
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld)
                            End Select

                        Case 1 'Strasse
                            Select Case FeldBezug2
                                Case 4 'Monolith
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("STRASSE", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 2 'Bruecke
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BRUECKE", X, Y, Objektverwalter.Spielfeld)
                        Case 3 'Fluss
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("FLUSS", X, Y, Objektverwalter.Spielfeld)
                                Case Else
                            End Select
                        Case 4 'Festung
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude = New GebaeudeFestung(5, 2000, -1, X, Y, 1, Objektverwalter.Spielfeld)
                        Case 5
                        Case 6
                        Case 7
                        Case 8 'Fliegende Festung auf Ebene
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht) = New ObjektLandschaft("LUFT", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht).Gebaeude = New GebaeudeFliegendeFestung(5, 2000, -1, X, Y, 1, Objektverwalter.Spielfeld)
                        Case 9
                        Case 10
                        Case 11 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 12 'Fliegendee Festung auf See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht) = New ObjektLandschaft("LUFT", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Luftschlacht).Gebaeude = New GebaeudeFliegendeFestung(5, 2000, -1, X, Y, 1, Objektverwalter.Spielfeld)
                        Case 13 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 14 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)

                        Case 16 'Pipeline
                            Select Case FeldBezug2
                                Case 4
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("PIPELINE", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 17
                        Case 18
                        Case 19
                        Case 20
                        Case 21
                        Case 23
                        Case 24
                        Case 25
                        Case 26
                        Case 27
                        Case 28
                        Case 29

                        Case 30 'Riff
                            Select Case FeldBezug2
                                Case 4
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("RIFF", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 31 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 32 'See
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BRUECKE", X, Y, Objektverwalter.Spielfeld)
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 33 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 34 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 39 'Strand
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("STRAND", X, Y, Objektverwalter.Spielfeld)
                        Case 44 'HQ OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("HQ", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 45 'Stadt OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("STADT", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 46 'Basis OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("BASIS", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 47 'Flughafen OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("FLUGHAFEN", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 48 'Hafen OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("WERFT", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 49 'Turm OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TURM", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 50 'Labor OS
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("LABOR", 1, X, Y, , Objektverwalter.Spielfeld))
                        Case 54 'HQ BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("HQ", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 55 'Stadt BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("STADT", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 56 'Basis BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("BASIS", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 57 'Flughafen BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("FLUGHAFEN", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 58 'Hafen BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("WERFT", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 59 'Turm BM
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TURM", 2, X, Y, , Objektverwalter.Spielfeld))
                        Case 60 'See oder Labor BM
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                                Case 1
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("LABOR", 2, X, Y, , Objektverwalter.Spielfeld))
                            End Select


                        Case 64 'HQ GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("HQ", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 65 'Stadt GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("STADT", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 66 'Basis GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("BASIS", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 67 'Flughafen GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("FLUGHAFEN", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 68 'Hafen GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("WERFT", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 69 'Turm GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TURM", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 70 'Labor GE
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("LABOR", 3, X, Y, , Objektverwalter.Spielfeld))
                        Case 74 'HQ YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("HQ", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 75 'Stadt YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("STADT", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 76 'Basis YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("BASIS", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 77 'Flughafen YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("FLUGHAFEN", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 78 'Hafen YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("WERFT", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 79 'Turm YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TURM", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 80 'Labor YC
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("LABOR", 4, X, Y, , Objektverwalter.Spielfeld))
                        Case 84 'HQ BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("HQ", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 85 'Stadt BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("STADT", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 86 'Basis BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("BASIS", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 87 'Flughafen BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("FLUGHAFEN", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 88 'Hafen BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("WERFT", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 89 'Turm BH
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TURM", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 90 'Wald oder Labor BH

                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("WALD", X, Y, Objektverwalter.Spielfeld)
                                Case 1
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("LABOR", 5, X, Y, , Objektverwalter.Spielfeld))
                            End Select
                        Case 94 'Raketensilo Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("RAKETENSILO+RAKETE", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 95 'Stadt Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("STADT", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 96 'Basis Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("BASIS", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 97 'Flughafen Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("FLUGHAFEN", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 98 'Hafen Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("WERFT", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 99 'Turm Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TURM", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 100 'Labor Neutral
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("LABOR", 0, X, Y, , Objektverwalter.Spielfeld))
                        Case 132
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("MINIGESCHUETZ+N", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 133 'Minigeschuetze West
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("MINIGESCHUETZ+W", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 134 'Laser
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("LASER", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 139
                        Case 140
                        Case 141
                        Case 142
                        Case 143
                        Case 144
                        Case 145
                        Case 146
                        Case 150 'Berg
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BERG", X, Y, Objektverwalter.Spielfeld)
                        Case 152 'Minigeschuetz Ost
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("MINIGESCHUETZ+O", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 153 'Minigeschuetz Sued
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("MINIGESCHUETZ+S", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 155 'Kristall
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("KRISTALL", 5, X, Y, , Objektverwalter.Spielfeld))
                        Case 159
                        Case 160
                        Case 161
                        Case 162
                        Case 163
                        Case 164
                        Case 165
                        Case 166
                        Case 167 'Ebene mit Schrott
                            Select Case FeldBezug2
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE+SCHROTT", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 172
                        Case 173
                        Case 174
                        Case 175 'Waere Schwarzes Geschuetz
                        Case 176 'Waere Schwarzes Geschuetz
                        Case 177 'Waere Schwarzes Geschuetz
                        Case 179
                        Case 180 'Vulkan
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude = ObjektLadeklasse.NewGebaeude("VULKAN", 0, X, Y, , Objektverwalter.Spielfeld)
                        Case 181
                        Case 182
                        Case 183
                        Case 184
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude = ObjektLadeklasse.NewGebaeude("OMEGARAKETE", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 185
                        Case 186
                        Case 192
                        Case 193 'Schwarze Geschuetz nach Sueden
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude = ObjektLadeklasse.NewGebaeude("SCHWARZE GESCHUETZ+S", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 194
                        Case 195 'Waere Schwarzes Geschuetz
                        Case 196 'Schwarze Geschuetz nach Norden
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude = ObjektLadeklasse.NewGebaeude("SCHWARZE GESCHUETZ+N", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 197 'Waere Schwarzes Geschuetz
                        Case 199
                        Case 200
                        Case 201
                        Case 202
                        Case 203
                        Case 204
                        Case 205
                        Case 206
                        Case 212
                        Case 213
                        Case 214
                        Case 215 'Waere Schwarzes Geschuetz
                        Case 216 'Waere Schwarzes Geschuetz
                        Case 217 'Waere Schwarzes Geschuetz
                        Case 219
                        Case 220
                        Case 221
                        Case 222
                        Case 223
                        Case 224
                        Case 225
                        Case 226 'Schweissnaht
                            Select Case FeldBezug2
                                Case 3
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SCHWEISSNAHT", X, Y, Objektverwalter.Spielfeld)
                            End Select
                        Case 227 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 228 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 229 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 230 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 232
                        Case 233
                        Case 234
                        Case 235
                        Case 236
                        Case 237
                        Case 239
                        Case 240
                        Case 241
                        Case 242
                        Case 243
                        Case 244
                        Case 245
                        Case 246
                        Case 247 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 248 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 249 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 250 'See
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 252
                        Case 253 'Schocklaser
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, )
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude = ObjektLadeklasse.NewGebaeude("SCHOCKLASER+S", 5, X, Y, , Objektverwalter.Spielfeld)
                        Case 254
                        Case 255
                    End Select
                Next
            Next
            'Die Einheiten erschaffen
            For X = 0 To Breite - 1
                For Y = 0 To Hoehe - 1
                    FeldBezug1 = Reader.ReadByte
                    FeldBezug2 = Reader.ReadByte
                    If FeldBezug2 = 255 And FeldBezug1 = 255 Then Continue For
                    Select Case FeldBezug1
                        'Orange Star
                        Case 244 'Infanterie OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(1, X, Y, False)
                        Case 245 'Kampfpanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(1, X, Y, False)
                        Case 246 'Spaeher OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpaeher(1, X, Y, False)
                        Case 247 'Artillerie OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(1, X, Y, False)
                        Case 248 'Flak OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(1, X, Y, False)
                        Case 249 'Jaeger OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJaeger(1, X, Y, False)
                        Case 250 'K-Heli OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(1, X, Y, False)
                        Case 251 'Inf OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(1, X, Y, False)
                        Case 252 'Landeboot OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(1, X, Y, False)
                        Case 253 'Titanpanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(1, X, Y, False)
                        Case 254 'Megapanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(1, X, Y, False)
                        Case 255 'Laeufer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLaeufer(1, X, Y, False)
                        Case 0 'Hoellium OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHoellium(1, X, Y, False)
                        Case 8 'Mech OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(1, X, Y, False)
                        Case 9 'Jagdpanzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(1, X, Y, False)
                        Case 10 'TTP OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(1, X, Y, False)
                        Case 11 'Raketenwerfer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(1, X, Y, False)
                        Case 12 'Missile OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(1, X, Y, False)
                        Case 13 'Bomber OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(1, X, Y, False)
                        Case 14 'T-Heli OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(1, X, Y, False)
                        Case 15 'Kreuzer OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(1, X, Y, False)
                        Case 16 'U-Boot OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(1, X, Y, False)
                        Case 17 'Schwarze Boot OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(1, X, Y, False)
                        Case 18 'Flugzeugtraeger OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugtraeger(1, X, Y, False)
                        Case 19 'Tarnkappenbomber OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(1, X, Y, False)
                        Case 20 'Schwarze Bombe OS
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(1, X, Y, False)

                            'Blue Moon
                        Case 28 'Infanterie BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(2, X, Y, False)
                        Case 29 'Kampfpanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(2, X, Y, False)
                        Case 30 'Spaeher BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpaeher(2, X, Y, False)
                        Case 31 'Artillerie BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(2, X, Y, False)
                        Case 32 'Flak BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(2, X, Y, False)
                        Case 33 'Jaeger BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJaeger(2, X, Y, False)
                        Case 34 'K-Heli BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(2, X, Y, False)
                        Case 35 'Inf BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(2, X, Y, False)
                        Case 36 'Landeboot BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(2, X, Y, False)
                        Case 37 'Titanpanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(2, X, Y, False)
                        Case 38 'Megapanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(2, X, Y, False)
                        Case 39 'Laeufer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLaeufer(2, X, Y, False)
                        Case 40 'Hoellium BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHoellium(2, X, Y, False)
                        Case 48 'Mech BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(2, X, Y, False)
                        Case 49 'Jagdpanzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(2, X, Y, False)
                        Case 50 'TTP BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(2, X, Y, False)
                        Case 51 'Raketenwerfer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(2, X, Y, False)
                        Case 52 'Missile BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(2, X, Y, False)
                        Case 53 'Bomber BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(2, X, Y, False)
                        Case 54 'T-Heli BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(2, X, Y, False)
                        Case 55 'Kreuzer BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(2, X, Y, False)
                        Case 56 'U-Boot BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(2, X, Y, False)
                        Case 57 'Schwarze Boot BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(2, X, Y, False)
                        Case 58 'Flugzeugtraeger BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugtraeger(2, X, Y, False)
                        Case 59 'Tarnkappenbomber BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(2, X, Y, False)
                        Case 60 'Schwarze Bombe BM
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(2, X, Y, False)

                            'Green Earth
                        Case 68 'Infanterie GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(3, X, Y, False)
                        Case 69 'Kampfpanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(3, X, Y, False)
                        Case 70 'Spaeher GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpaeher(3, X, Y, False)
                        Case 71 'Artillerie GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(3, X, Y, False)
                        Case 72 'Flak GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(3, X, Y, False)
                        Case 73 'Jaeger GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJaeger(3, X, Y, False)
                        Case 74 'K-Heli GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(3, X, Y, False)
                        Case 75 'Inf GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(3, X, Y, False)
                        Case 76 'Landeboot GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(3, X, Y, False)
                        Case 77 'Titanpanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(3, X, Y, False)
                        Case 78 'Megapanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(3, X, Y, False)
                        Case 79 'Laeufer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLaeufer(3, X, Y, False)
                        Case 80 'Hoellium GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHoellium(3, X, Y, False)
                        Case 88 'Mech GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(3, X, Y, False)
                        Case 89 'Jagdpanzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(3, X, Y, False)
                        Case 90 'TTP GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(3, X, Y, False)
                        Case 91 'Raketenwerfer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(3, X, Y, False)
                        Case 92 'Missile GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(3, X, Y, False)
                        Case 93 'Bomber GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(3, X, Y, False)
                        Case 94 'T-Heli GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(3, X, Y, False)
                        Case 95 'Kreuzer GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(3, X, Y, False)
                        Case 96 'U-Boot GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(3, X, Y, False)
                        Case 97 'Schwarze Boot GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(3, X, Y, False)
                        Case 98 'Flugzeugtraeger GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugtraeger(3, X, Y, False)
                        Case 99 'Tarnkappenbomber GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(3, X, Y, False)
                        Case 100 'Schwarze Bombe GE
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(3, X, Y, False)

                            'Yellow Comet
                        Case 108 'Infanterie YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(4, X, Y, False)
                        Case 109 'Kampfpanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(4, X, Y, False)
                        Case 110 'Spaeher YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpaeher(4, X, Y, False)
                        Case 111 'Artillerie YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(4, X, Y, False)
                        Case 112 'Flak YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(4, X, Y, False)
                        Case 113 'Jaeger YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJaeger(4, X, Y, False)
                        Case 114 'K-Heli YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(4, X, Y, False)
                        Case 115 'Inf YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(4, X, Y, False)
                        Case 116 'Landeboot YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(4, X, Y, False)
                        Case 117 'Titanpanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(4, X, Y, False)
                        Case 118 'Megapanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(4, X, Y, False)
                        Case 119 'Laeufer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLaeufer(4, X, Y, False)
                        Case 120 'Hoellium YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHoellium(4, X, Y, False)
                        Case 128 'Mech YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(4, X, Y, False)
                        Case 129 'Jagdpanzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(4, X, Y, False)
                        Case 130 'TTP YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(4, X, Y, False)
                        Case 131 'Raketenwerfer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(4, X, Y, False)
                        Case 132 'Missile YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(4, X, Y, False)
                        Case 133 'Bomber YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(4, X, Y, False)
                        Case 134 'T-Heli YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(4, X, Y, False)
                        Case 135 'Kreuzer YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(4, X, Y, False)
                        Case 136 'U-Boot YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(4, X, Y, False)
                        Case 137 'Schwarze Boot YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(4, X, Y, False)
                        Case 138 'Flugzeugtraeger YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugtraeger(4, X, Y, False)
                        Case 139 'Tarnkappenbomber YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(4, X, Y, False)
                        Case 140 'Schwarze Bombe YC
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(4, X, Y, False)
                            'Black Hole
                        Case 148 'Infanterie BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitInfanterie(5, X, Y, False)
                        Case 149 'Kampfpanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKampfpanzer(5, X, Y, False)
                        Case 150 'Spaeher BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSpaeher(5, X, Y, False)
                        Case 151 'Artillerie BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitArtillerie(5, X, Y, False)
                        Case 152 'Flak BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlak(5, X, Y, False)
                        Case 153 'Jaeger BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJaeger(5, X, Y, False)
                        Case 154 'K-Heli BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New K_Heli(5, X, Y, False)
                        Case 155 'Inf BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitSchlachtschiff(5, X, Y, False)
                        Case 156 'Landeboot BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitL_Boot(5, X, Y, False)
                        Case 157 'Titanpanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTitanpanzer(5, X, Y, False)
                        Case 158 'Megapanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMegapanzer(5, X, Y, False)
                        Case 159 'Laeufer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitLaeufer(5, X, Y, False)
                        Case 160 'Hoellium BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitHoellium(5, X, Y, False)
                        Case 168 'Mech BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMech(5, X, Y, False)
                        Case 169 'Jagdpanzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitJagdpanzer(5, X, Y, False)
                        Case 170 'TTP BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTTP(5, X, Y, False)
                        Case 171 'Raketenwerfer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitRaketenwerfer(5, X, Y, False)
                        Case 172 'Missile BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitMissile(5, X, Y, False)
                        Case 173 'Bomber BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitBomber(5, X, Y, False)
                        Case 174 'T-Heli BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTransporthelikopter(5, X, Y, False)
                        Case 175 'Kreuzer BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitKreuzer(5, X, Y, False)
                        Case 176 'U-Boot BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New U_Boot(5, X, Y, False)
                        Case 177 'Schwarze Boot BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Boot(5, X, Y, False)
                        Case 178 'Flugzeugtraeger BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitFlugzeugtraeger(5, X, Y, False)
                        Case 179 'Tarnkappenbomber BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New EinheitTarnkappenbomber(5, X, Y, False)
                        Case 180 'Schwarze Bombe BH
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = New Schwarze_Bombe(5, X, Y, False)
                    End Select
                Next
            Next
            'Jetzt kommen wir Bytes die sagen Ende der Karte
            Dim Kartennamenlaenge As Integer = Reader.ReadByte
            For I = 0 To 2
                Reader.ReadByte()
            Next
            'Jetzt kommt der Karten Name
            Dim StringReader As New IO.StreamReader(Reader, Hauptmenue.Codierung)
            Dim Kartenname As String = ""
            For I = 0 To Kartennamenlaenge - 1
                StringReader.Read(Zeichen, 0, 1)
                Kartenname += Zeichen(0)
            Next
            'Jetzt kommt vier Zeichen nichts
            Kartennamenlaenge = StringReader.Read
            For I = 0 To 2
                StringReader.Read()
            Next
            Dim Autor As String = ""
            For I = 0 To Kartennamenlaenge - 1
                StringReader.Read(Zeichen, 0, 1)
                Autor += Zeichen(0)
            Next
            'Jetzt kommt vier Zeichen nichts
            For I = 0 To 3
                StringReader.Read()
            Next
            Dim Beschreibung As String = ""
            Beschreibung = StringReader.ReadToEnd
            Objektverwalter.Spielfeld.Autor = Autor
            Objektverwalter.Spielfeld.Kartenname = Kartenname
            Objektverwalter.Spielfeld.Beschreibung = Beschreibung
        End Using
        OptimizePlayerNumber()
    End Sub
    ''' <summary>
    ''' Diese Sub Importiert eine AWDS-Karte des AWS-Map-Editors von Joao Pedro S. Francese
    ''' </summary>
    ''' <param name="File"></param>
    ''' <remarks></remarks>
    Public Shared Sub ExportAWSMap(ByVal File As String)
        If Objektverwalter.Spielfeld.Spieler.Length <= 6 Then
            Using Writer As New IO.FileStream(File, IO.FileMode.OpenOrCreate, IO.FileAccess.Write, IO.FileShare.Write)
                'Zuerst mal den Start weglesen brauchen wir nicht!
                Writer.WriteByte(4 * 16 + 1)
                Writer.WriteByte(5 * 16 + 7)
                Writer.WriteByte(5 * 16 + 3)
                Writer.WriteByte(4 * 16 + 13)
                Writer.WriteByte(6 * 16 + 1)
                Writer.WriteByte(7 * 16 + 0)
                Writer.WriteByte(3 * 16 + 0)
                Writer.WriteByte(3 * 16 + 0)
                Writer.WriteByte(3 * 16 + 1)
                Writer.WriteByte(0)
                Writer.WriteByte(Objektverwalter.Spielfeld.Breite)
                Writer.WriteByte(Objektverwalter.Spielfeld.Hoehe)
                'Terrain Style
                Writer.WriteByte(0)
                For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                    For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                        If Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).isGebaeude Then
                            Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.GebaeudeID
                                Case "HQ"
                                    Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.Spieler
                                        Case 0
                                        Case 0
                                            Writer.WriteByte(94)
                                            Writer.WriteByte(1)
                                        Case 1
                                            Writer.WriteByte(44)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(54)
                                            Writer.WriteByte(1)
                                        Case 3
                                            Writer.WriteByte(64)
                                            Writer.WriteByte(1)
                                        Case 4
                                            Writer.WriteByte(74)
                                            Writer.WriteByte(1)
                                        Case 5
                                            Writer.WriteByte(84)
                                            Writer.WriteByte(1)
                                    End Select
                                Case "STADT"
                                    Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.Spieler
                                        Case 0
                                            Writer.WriteByte(95)
                                            Writer.WriteByte(1)
                                        Case 1
                                            Writer.WriteByte(45)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(55)
                                            Writer.WriteByte(1)
                                        Case 3
                                            Writer.WriteByte(65)
                                            Writer.WriteByte(1)
                                        Case 4
                                            Writer.WriteByte(75)
                                            Writer.WriteByte(1)
                                        Case 5
                                            Writer.WriteByte(85)
                                            Writer.WriteByte(1)
                                    End Select
                                Case "BASIS"
                                    Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.Spieler
                                        Case 0
                                            Writer.WriteByte(96)
                                            Writer.WriteByte(1)
                                        Case 1
                                            Writer.WriteByte(46)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(56)
                                            Writer.WriteByte(1)
                                        Case 3
                                            Writer.WriteByte(66)
                                            Writer.WriteByte(1)
                                        Case 4
                                            Writer.WriteByte(76)
                                            Writer.WriteByte(1)
                                        Case 5
                                            Writer.WriteByte(86)
                                            Writer.WriteByte(1)
                                    End Select
                                Case "FLUGHAFEN"
                                    Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.Spieler
                                        Case 0
                                            Writer.WriteByte(97)
                                            Writer.WriteByte(1)
                                        Case 1
                                            Writer.WriteByte(47)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(57)
                                            Writer.WriteByte(1)
                                        Case 3
                                            Writer.WriteByte(67)
                                            Writer.WriteByte(1)
                                        Case 4
                                            Writer.WriteByte(77)
                                            Writer.WriteByte(1)
                                        Case 5
                                            Writer.WriteByte(87)
                                            Writer.WriteByte(1)
                                    End Select
                                Case "WERFT"
                                    Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.Spieler
                                        Case 0
                                            Writer.WriteByte(98)
                                            Writer.WriteByte(1)
                                        Case 1
                                            Writer.WriteByte(48)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(58)
                                            Writer.WriteByte(1)
                                        Case 3
                                            Writer.WriteByte(68)
                                            Writer.WriteByte(1)
                                        Case 4
                                            Writer.WriteByte(78)
                                            Writer.WriteByte(1)
                                        Case 5
                                            Writer.WriteByte(88)
                                            Writer.WriteByte(1)
                                    End Select
                                Case "TURM"
                                    Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.Spieler
                                        Case 0
                                            Writer.WriteByte(99)
                                            Writer.WriteByte(1)
                                        Case 1
                                            Writer.WriteByte(49)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(59)
                                            Writer.WriteByte(1)
                                        Case 3
                                            Writer.WriteByte(69)
                                            Writer.WriteByte(1)
                                        Case 4
                                            Writer.WriteByte(79)
                                            Writer.WriteByte(1)
                                        Case 5
                                            Writer.WriteByte(89)
                                            Writer.WriteByte(1)
                                    End Select
                                Case "LABOR"
                                    Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude.Spieler
                                        Case 0
                                            Writer.WriteByte(100)
                                            Writer.WriteByte(1)
                                        Case 1
                                            Writer.WriteByte(50)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(60)
                                            Writer.WriteByte(1)
                                        Case 3
                                            Writer.WriteByte(70)
                                            Writer.WriteByte(1)
                                        Case 4
                                            Writer.WriteByte(80)
                                            Writer.WriteByte(1)
                                        Case 5
                                            Writer.WriteByte(90)
                                            Writer.WriteByte(1)
                                    End Select
                                Case "RAKETENSILO+RAKETE", "RAKETENSILO"
                                    Writer.WriteByte(94)
                                    Writer.WriteByte(1)
                                    'Spezialgebaeude
                                Case "MINIGESCHUETZ+N"
                                    Writer.WriteByte(8 * 16 + 4)
                                    Writer.WriteByte(3)
                                Case "MINIGESCHUETZ+W"
                                    Writer.WriteByte(8 * 16 + 5)
                                    Writer.WriteByte(3)
                                Case "LASER"
                                    Writer.WriteByte(8 * 16 + 6)
                                    Writer.WriteByte(3)
                                Case "MINIGESCHUETZ+O"
                                    Writer.WriteByte(9 * 16 + 8)
                                    Writer.WriteByte(3)
                                Case "MINIGESCHUETZ+S"
                                    Writer.WriteByte(9 * 16 + 9)
                                    Writer.WriteByte(3)
                                Case "KRISTALL"
                                    Writer.WriteByte(9 * 16 + 11)
                                    Writer.WriteByte(3)
                                Case "SCHWARZE GESCHUETZ+N"
                                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                                    Select Case G.Rechteck.X - X
                                        Case 1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 15)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(12 * 16 + 3)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(13 * 16 + 7)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case 0
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(11 * 16 + 0)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(12 * 16 + 4)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(13 * 16 + 8)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case -1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(11 * 16 + 1)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(12 * 16 + 5)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(13 * 16 + 9)
                                                    Writer.WriteByte(3)
                                            End Select
                                    End Select
                                Case "SCHWARZE GESCHUETZ+S"
                                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                                    Select Case G.Rechteck.X - X
                                        Case 1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 12)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(12 * 16 + 0)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(13 * 16 + 4)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case 0
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 13)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(12 * 16 + 1)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(13 * 16 + 5)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case -1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 14)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(12 * 16 + 2)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(13 * 16 + 6)
                                                    Writer.WriteByte(3)
                                            End Select
                                    End Select
                                Case "SCHOCKLASER+S"
                                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                                    Select Case G.Rechteck.X - X
                                        Case 1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(14 * 16 + 8)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(15 * 16 + 12)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 0)
                                                    Writer.WriteByte(4)
                                            End Select
                                        Case 0
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(14 * 16 + 9)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(15 * 16 + 13)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 1)
                                                    Writer.WriteByte(4)
                                            End Select
                                        Case -1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(14 * 16 + 10)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(15 * 16 + 14)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 2)
                                                    Writer.WriteByte(4)
                                            End Select
                                    End Select
                                Case "MONOLITH"
                                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                                    Select Case G.Rechteck.X - X
                                        Case 1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(14 * 16 + 11)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(15 * 16 + 15)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 3)
                                                    Writer.WriteByte(4)
                                            End Select
                                        Case 0
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(14 * 16 + 12)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(0 * 16 + 0)
                                                    Writer.WriteByte(4)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 4)
                                                    Writer.WriteByte(4)
                                            End Select
                                        Case -1
                                            Select Case G.Rechteck.Y - Y
                                                Case 1
                                                    Writer.WriteByte(14 * 16 + 13)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(0 * 16 + 1)
                                                    Writer.WriteByte(4)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 5)
                                                    Writer.WriteByte(4)
                                            End Select
                                    End Select
                                Case "VULKAN"
                                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                                    Select Case G.Rechteck.X - X
                                        Case 1
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(8 * 16 + 11)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(9 * 16 + 15)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 3)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 7)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case 0
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(8 * 16 + 12)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(9 * 16 + 16)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 4)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 8)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case -1
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(8 * 16 + 13)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(9 * 16 + 17)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 5)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 9)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case -2
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(8 * 16 + 14)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(9 * 16 + 18)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 6)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 10)
                                                    Writer.WriteByte(3)
                                            End Select
                                    End Select
                                Case "FESTUNG"
                                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                                    Select Case G.Rechteck.X - X
                                        Case 1
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(13 * 16 + 11)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(14 * 16 + 15)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(0 * 16 + 3)
                                                    Writer.WriteByte(4)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 7)
                                                    Writer.WriteByte(4)
                                            End Select
                                        Case 0
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(13 * 16 + 12)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(15 * 16 + 0)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(0 * 16 + 4)
                                                    Writer.WriteByte(4)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 8)
                                                    Writer.WriteByte(4)
                                            End Select
                                        Case -1
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(13 * 16 + 13)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(15 * 16 + 1)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(0 * 16 + 5)
                                                    Writer.WriteByte(4)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 9)
                                                    Writer.WriteByte(4)
                                            End Select
                                        Case -2
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(13 * 16 + 14)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(15 * 16 + 2)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(0 * 16 + 6)
                                                    Writer.WriteByte(4)
                                                Case -1
                                                    Writer.WriteByte(1 * 16 + 10)
                                                    Writer.WriteByte(4)
                                            End Select
                                    End Select
                                Case "OMEGARAKETE"
                                    Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                                    Select Case G.Rechteck.X - X
                                        Case 1
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(8 * 16 + 15)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 3)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 7)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 11)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case 0
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(9 * 16 + 0)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 4)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 8)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 12)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case -1
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(9 * 16 + 1)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 5)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 9)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 13)
                                                    Writer.WriteByte(3)
                                            End Select
                                        Case -2
                                            Select Case G.Rechteck.Y - Y
                                                Case 2
                                                    Writer.WriteByte(9 * 16 + 2)
                                                    Writer.WriteByte(3)
                                                Case 1
                                                    Writer.WriteByte(10 * 16 + 6)
                                                    Writer.WriteByte(3)
                                                Case 0
                                                    Writer.WriteByte(11 * 16 + 10)
                                                    Writer.WriteByte(3)
                                                Case -1
                                                    Writer.WriteByte(12 * 16 + 14)
                                                    Writer.WriteByte(3)
                                            End Select
                                    End Select
                                Case Else
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                            End Select
                        Else
                            Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).LandschaftsID
                                Case "KAPUTTESCHWEISSNAHT"
                                    Writer.WriteByte(10 * 16 + 7)
                                    Writer.WriteByte(0)
                                Case "EBENE"
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "STRASSE"
                                    Writer.WriteByte(1)
                                    Writer.WriteByte(0)
                                Case "BRUECKE"
                                    Dim Ausr As String = Objektverwalter.LandschaftenBilder(Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).ID).getAusrichtung(X, Y, Objektverwalter.Spielfeld)
                                    If Ausr = "+N+S" Then
                                        Writer.WriteByte(2)
                                        Writer.WriteByte(0)
                                    Else
                                        Writer.WriteByte(32)
                                        Writer.WriteByte(0)
                                    End If
                                Case "FLUSS"
                                    Writer.WriteByte(3)
                                    Writer.WriteByte(0)
                                Case "SEE"
                                    Writer.WriteByte(3 * 16 + 12)
                                    Writer.WriteByte(0)
                                Case "PIPELINE"
                                    Writer.WriteByte(16)
                                    Writer.WriteByte(0)
                                Case "RIFF"
                                    Writer.WriteByte(30)
                                    Writer.WriteByte(0)
                                Case "STRAND"
                                    Writer.WriteByte(39)
                                    Writer.WriteByte(0)
                                Case "WALD"
                                    Writer.WriteByte(90)
                                    Writer.WriteByte(0)
                                Case "BERG"
                                    Writer.WriteByte(150)
                                    Writer.WriteByte(0)
                                Case "EBENE+SCHROTT"
                                    Writer.WriteByte(167)
                                    Writer.WriteByte(0)
                                Case "SCHWEISSNAHT"
                                    Writer.WriteByte(226)
                                    Writer.WriteByte(0)
                                Case Else
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                            End Select
                        End If
                    Next
                Next
                ''Die Einheiten erschaffen
                For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                    For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                        If Objektverwalter.Spielfeld.Einheiten(X, Y, 0) Is Nothing Then
                            Writer.WriteByte(Byte.MaxValue)
                            Writer.WriteByte(Byte.MaxValue)
                        Else
                            Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).EinheitenID
                                Case "INF"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(244)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(28)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(68)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(108)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(148)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "MECH"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(8)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(48)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(88)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(128)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(168)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "TTP"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(10)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(50)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(90)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(130)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(170)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "HOELLIUM"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(0)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(40)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(80)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(120)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(160)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "SPAEHER"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(246)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(30)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(70)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(110)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(150)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "JGPZ"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(9)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(49)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(89)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(129)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(169)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "KPZ"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(245)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(29)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(69)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(109)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(149)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "TITANPZ"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(253)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(37)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(77)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(117)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(157)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "MEGAPZ"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(254)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(38)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(78)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(118)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(158)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "ART"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(247)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(31)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(71)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(111)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(151)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "RKW"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(11)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(51)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(91)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(131)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(171)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "LAEUFER"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(255)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(39)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(79)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(119)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(159)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "MISSILE"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(12)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(52)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(92)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(132)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(172)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "FLAK"                            'Flak OS
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(248)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(32)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(72)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(112)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(152)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "T-HELI"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(14)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(54)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(94)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(134)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(174)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "JAEGER" '249 'Jaeger OS
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(249)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(33)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(73)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(113)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(153)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "K-HELI" ' 250 'K-Heli OS
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(250)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(34)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(74)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(114)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(154)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "SCHLFF"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(251)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(35)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(75)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(115)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(155)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "L-BOOT"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(252)
                                            Writer.WriteByte(1)
                                        Case 2
                                            Writer.WriteByte(36)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(76)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(116)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(156)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "BOMBER"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(13)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(53)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(93)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(133)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(173)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "KREUZER"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(15)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(55)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(95)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(135)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(175)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "U-BOOT"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(16)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(56)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(96)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(136)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(176)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "S-BOOT"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(17)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(57)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(97)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(137)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(177)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "FLTR"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(18)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(58)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(98)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(138)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(178)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "TARNK"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(19)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(59)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(99)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(139)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(179)
                                            Writer.WriteByte(2)
                                    End Select
                                Case "S-BOMBE"
                                    Select Case Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).Spieler
                                        Case 1
                                            Writer.WriteByte(20)
                                            Writer.WriteByte(2)
                                        Case 2
                                            Writer.WriteByte(70)
                                            Writer.WriteByte(2)
                                        Case 3
                                            Writer.WriteByte(100)
                                            Writer.WriteByte(2)
                                        Case 4
                                            Writer.WriteByte(140)
                                            Writer.WriteByte(2)
                                        Case 5
                                            Writer.WriteByte(180)
                                            Writer.WriteByte(2)
                                    End Select
                                Case Else
                                    Writer.WriteByte(Byte.MaxValue)
                                    Writer.WriteByte(Byte.MaxValue)
                            End Select
                        End If
                    Next
                Next
                Writer.WriteByte(Objektverwalter.Spielfeld.Kartenname.Length)
                Writer.WriteByte(0)
                Writer.WriteByte(0)
                Writer.WriteByte(0)
                'Jetzt kommt der Karten Name
                Dim S() As Char = Objektverwalter.Spielfeld.Kartenname.ToCharArray
                For I = 0 To S.Length - 1
                    Writer.WriteByte(CByte(AscW(S(I))))
                Next
                Writer.WriteByte(Objektverwalter.Spielfeld.Autor.Length)
                Writer.WriteByte(0)
                Writer.WriteByte(0)
                Writer.WriteByte(0)
                S = Objektverwalter.Spielfeld.Autor.ToCharArray
                For I = 0 To S.Length - 1
                    Writer.WriteByte(CByte(AscW(S(I))))
                Next
                ''Jetzt kommt vier Zeichen nichts
                Writer.WriteByte(Objektverwalter.Spielfeld.Beschreibung.Length)
                Writer.WriteByte(0)
                Writer.WriteByte(0)
                Writer.WriteByte(0)
                S = Objektverwalter.Spielfeld.Beschreibung.ToCharArray
                For I = 0 To S.Length - 1
                    Writer.WriteByte(CByte(AscW(S(I))))
                Next
            End Using
        End If
    End Sub
    ''' <summary>
    ''' Diese Sub Importiert eine AWDC-Karte des AW4-Map-Editors von ST. Johnston
    ''' </summary>
    ''' <param name="File"></param>
    ''' <remarks></remarks>
    Public Shared Sub ImportAW4Map(ByVal File As String)
        Using Reader As New IO.FileStream(File, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
            'Terrain-Style
            Reader.ReadByte()

            Dim Breite As Integer = Reader.ReadByte()
            Dim Hoehe As Integer = Reader.ReadByte()
            Dim Spieler As ObjektSpieler() = {}
            'Dauert ohne laenger aber die Farben stimmen!  
            'If Not Objektverwalter.Spielfeld Is Nothing Then
            '    Spieler = Objektverwalter.Spielfeld.Spieler
            'End If
            If Spieler.Length < 9 Then
                Dim SpielerZahl As Integer = Spieler.Length
                Array.Resize(Spieler, 9)
                For I = SpielerZahl To 8
                    If I = 0 Then
                        Spieler(0) = New ObjektSpieler(0, Hauptmenue.SpielerNeutral, 0, Nothing, 0, Armeen.OS.ToString, "", Nothing, ObjektSpieler.KIStufen.Kinderleicht, 0)
                    Else
                        Dim Farbe As Color
                        Dim I2 As Integer = I - 1
                        While I2 > Hauptmenue.AlleFarbtabellen.Length - 1
                            I2 -= Hauptmenue.AlleFarbtabellen.Length - 1
                        End While
                        Farbe = Hauptmenue.AlleFarbtabellen(I2)
                        Dim Armee As Armeen = 10
                        I2 = I - 1
                        While I2 > [Enum].GetNames(Armeen.AC.GetType).Length - 1
                            I2 -= [Enum].GetNames(Armeen.AC.GetType).Length
                        End While
                        Armee = I2
                        Dim Team As Objektverwalter.ABC
                        I2 = I - 1
                        While I2 > [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length - 1
                            I2 -= [Enum].GetNames(Objektverwalter.ABC.A.GetType).Length
                        End While
                        Team = I2
                        If I = 1 Then
                            Spieler(I) = New ObjektSpieler(I, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Mensch, 30000)
                        Else
                            Spieler(I) = New ObjektSpieler(I, Farbe, 1000, Nothing, 0, Armee.ToString, Team.ToString, Nothing, ObjektSpieler.KIStufen.Normal, 30000)
                        End If
                    End If
                Next
            ElseIf Spieler.Length > 9 Then
                Array.Resize(Spieler, 9)
            End If
            'Neutrales Team festlegen
            Spieler(0).Team = "q"
            Objektverwalter.Spielfeld = New ObjektSpielfeld(Breite, Hoehe, Spieler, LoadRule(DataSettings.CommanderWarsGameModus, Spieler.Length - 1))
            'Kartenstart
            Reader.ReadByte()


            For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                    Dim TerrainID As Integer = Reader.ReadByte
                    Reader.ReadByte() 'Fuer uns Irrelevant See oder anderes usw..
                    Dim GSpieler As Integer = Reader.ReadByte
                    Dim UnitID As Integer = Reader.ReadByte
                    Dim AISetting As ObjektEinheit.AISetting = Reader.ReadByte() - 1 'Fuer uns Irrelevant KI-Stufe...
                    Dim UnitSpieler As Integer = Reader.ReadByte
                    Dim KOEinheit As Integer = Reader.ReadByte
                    Select Case TerrainID
                        Case 17
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("STADT", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 18
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("BASIS", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 19
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("WERFT", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 20
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("FLUGHAFEN", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 21
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("RADAR", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 22
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TURM", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 23
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TEMPWERFT", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 24
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("TEMPFLUGHAFEN", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                        Case 25
                            Select Case GSpieler
                                Case 0
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("RAKETENSILO+RAKETE", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                                Case Else
                                    Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld, ObjektLadeklasse.NewGebaeude("HQ", GSpieler, X, Y, , Objektverwalter.Spielfeld))
                            End Select
                        Case 0
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld)
                        Case 1
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("WALD", X, Y, Objektverwalter.Spielfeld)
                        Case 2
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BERG", X, Y, Objektverwalter.Spielfeld)
                        Case 3
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("OEDLAND", X, Y, Objektverwalter.Spielfeld)
                        Case 4
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("RUINE", X, Y, Objektverwalter.Spielfeld)
                        Case 5
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("FEUER", X, Y, Objektverwalter.Spielfeld)
                        Case 6
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("SEE", X, Y, Objektverwalter.Spielfeld)
                        Case 7
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("RIFF", X, Y, Objektverwalter.Spielfeld)
                        Case 8
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("RAUESEE", X, Y, Objektverwalter.Spielfeld)
                        Case 9
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("NEBEL", X, Y, Objektverwalter.Spielfeld)
                        Case 15
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("STRAND", X, Y, Objektverwalter.Spielfeld)
                        Case 10
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("STRASSE", X, Y, Objektverwalter.Spielfeld)
                        Case 12
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("FLUSS", X, Y, Objektverwalter.Spielfeld)
                        Case 13
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("PLASMA", X, Y, Objektverwalter.Spielfeld)
                        Case 14
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("METEOR", X, Y, Objektverwalter.Spielfeld)
                        Case 11
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("BRUECKE", X, Y, Objektverwalter.Spielfeld)
                        Case Else
                            Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht) = New ObjektLandschaft("EBENE", X, Y, Objektverwalter.Spielfeld)
                    End Select
                    'Einheit laden
                    Select Case UnitID
                        Case 1
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("INF", UnitSpieler, X, Y, False)
                        Case 2
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("MECH", UnitSpieler, X, Y, False)
                        Case 3
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("MOTORRAD", UnitSpieler, X, Y, False)
                        Case 4
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("SPAEHER", UnitSpieler, X, Y, False)
                        Case 5
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("FLARE", UnitSpieler, X, Y, False)
                        Case 6
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("FLAK", UnitSpieler, X, Y, False)
                        Case 7
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("TTP", UnitSpieler, X, Y, False)
                        Case 8
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("JGPZ", UnitSpieler, X, Y, False)
                        Case 9
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("KPZ", UnitSpieler, X, Y, False)
                        Case 10
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("MEGAPZ", UnitSpieler, X, Y, False)
                        Case 11
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("ART", UnitSpieler, X, Y, False)
                        Case 12
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("RKW", UnitSpieler, X, Y, False)
                        Case 13
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("PANZERABWEHRKANONE", UnitSpieler, X, Y, False)
                        Case 14
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("MISSILE", UnitSpieler, X, Y, False)
                        Case 15
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("JAEGER", UnitSpieler, X, Y, False)
                        Case 16
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("BOMBER", UnitSpieler, X, Y, False)
                        Case 17
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("AUFKLAERER", UnitSpieler, X, Y, False)
                        Case 18
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("WASSERFLUGZEUG", UnitSpieler, X, Y, False)
                        Case 19
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("K-HELI", UnitSpieler, X, Y, False)
                        Case 20
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("T-HELI", UnitSpieler, X, Y, False)
                        Case 21
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("SCHLFF", UnitSpieler, X, Y, False)
                        Case 22
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("FLTR", UnitSpieler, X, Y, False)
                        Case 23
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("KREUZER", UnitSpieler, X, Y, False)
                        Case 24
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("L-BOOT", UnitSpieler, X, Y, False)
                        Case 25
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("U-BOOT", UnitSpieler, X, Y, False)
                        Case 26
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) = ObjektLadeklasse.NewEinheit("KANONENBOOT", UnitSpieler, X, Y, False)
                    End Select
                    If Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht) IsNot Nothing Then
                        If KOEinheit > 0 Then
                            Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht).TruppenStufe = ObjektEinheit.Stufe.KO
                        End If
                    End If
                Next
            Next
            Dim S As String() = File.Split("\")
            Objektverwalter.Spielfeld.Autor = DataSettings.Autor
            Objektverwalter.Spielfeld.Kartenname = S(S.Length - 1).Remove(S(S.Length - 1).LastIndexOf("."))
            Objektverwalter.Spielfeld.Beschreibung = ""
        End Using
        OptimizePlayerNumber()
    End Sub
    ''' <summary>
    ''' Diese Sub Exportiert eine AWDC-Karte des AW4-Map-Editors von ST. Johnston
    ''' </summary>
    ''' <param name="File"></param>
    ''' <remarks></remarks>
    Public Shared Sub ExportAW4Map(ByVal File As String)
        If Objektverwalter.Spielfeld.Spieler.Length <= 9 Then
            Using Writer As New IO.FileStream(File, IO.FileMode.OpenOrCreate, IO.FileAccess.Write, IO.FileShare.Write)
                'Terrain-Art
                Writer.WriteByte(10)
                'Breite
                Writer.WriteByte(Objektverwalter.Spielfeld.Breite)
                'Hoehe
                Writer.WriteByte(Objektverwalter.Spielfeld.Hoehe)
                'Kartenstart
                Writer.WriteByte(255)
                'Karte speichern
                For X = 0 To Objektverwalter.Spielfeld.Breite - 1
                    For Y = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                        Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebaeude
                        'Gebaeude abspeichern
                        If G IsNot Nothing Then
                            Select Case G.GebaeudeID
                                Case "STADT"
                                    Writer.WriteByte(16 + 1)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case "BASIS"
                                    Writer.WriteByte(16 + 2)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case "WERFT"
                                    Writer.WriteByte(16 + 3)
                                    Writer.WriteByte(6)
                                    Writer.WriteByte(G.Spieler)
                                Case "FLUGHAFEN"
                                    Writer.WriteByte(16 + 4)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case "RADAR"
                                    Writer.WriteByte(16 + 5)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case "TURM"
                                    Writer.WriteByte(16 + 6)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case "TEMPWERFT"
                                    Writer.WriteByte(16 + 7)
                                    Writer.WriteByte(6)
                                    Writer.WriteByte(G.Spieler)
                                Case "TEMPFLUGHAFEN"
                                    Writer.WriteByte(16 + 8)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case "HQ"
                                    Writer.WriteByte(16 + 0)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case "RAKETENSILO", "RAKETENSILO+RAKETE"
                                    Writer.WriteByte(16 + 0)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(G.Spieler)
                                Case Else
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                            End Select
                        Else
                            'Landschaft abspeichern.
                            Select Case Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).getID
                                Case "EBENE"
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "WALD"
                                    Writer.WriteByte(1)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "BERG"
                                    Writer.WriteByte(2)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "OEDLAND"
                                    Writer.WriteByte(3)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "RUINE"
                                    Writer.WriteByte(4)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "FEUER"
                                    Writer.WriteByte(5)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "SEE"
                                    Writer.WriteByte(6)
                                    Writer.WriteByte(6) 'See Terrain
                                    Writer.WriteByte(0)
                                Case "RIFF"
                                    Writer.WriteByte(7)
                                    Writer.WriteByte(6) 'See Terrain
                                    Writer.WriteByte(0)
                                Case "RAUESEE"
                                    Writer.WriteByte(8)
                                    Writer.WriteByte(6) 'See Terrain
                                    Writer.WriteByte(0)
                                Case "NEBEL"
                                    Writer.WriteByte(9)
                                    Writer.WriteByte(6) 'See Terrain
                                    Writer.WriteByte(0)
                                Case "STRAND"
                                    Writer.WriteByte(15)
                                    Writer.WriteByte(6) 'See Terrain
                                    Writer.WriteByte(0)
                                Case "STRASSE"
                                    Writer.WriteByte(10)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "FLUSS"
                                    Writer.WriteByte(12)
                                    Writer.WriteByte(12) 'FLUSS Terrain
                                    Writer.WriteByte(0)
                                Case "PLASMA"
                                    Writer.WriteByte(13)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "METEOR"
                                    Writer.WriteByte(14)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                Case "BRUECKE"
                                    Writer.WriteByte(11)
                                    Writer.WriteByte(6) 'See Terrain
                                    Writer.WriteByte(0)
                                Case Else
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                            End Select
                        End If
                        'Einheitspeichern
                        Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(X, Y, ObjektSpielfeld.Bodenschlacht)
                        If E IsNot Nothing Then
                            Select Case E.EinheitenID
                                Case "INF"
                                    Writer.WriteByte(1)
                                Case "MECH"
                                    Writer.WriteByte(2)
                                Case "MOTORRAD"
                                    Writer.WriteByte(3)
                                Case "SPAEHER"
                                    Writer.WriteByte(4)
                                Case "FLARE"
                                    Writer.WriteByte(5)
                                Case "FLAK"
                                    Writer.WriteByte(6)
                                Case "TTP"
                                    Writer.WriteByte(7)
                                Case "JGPZ"
                                    Writer.WriteByte(8)
                                Case "KPZ"
                                    Writer.WriteByte(9)
                                Case "MEGAPZ"
                                    Writer.WriteByte(10)
                                Case "ART"
                                    Writer.WriteByte(11)
                                Case "RKW"
                                    Writer.WriteByte(12)
                                Case "PANZERABWEHRKANONE"
                                    Writer.WriteByte(13)
                                Case "MISSILE"
                                    Writer.WriteByte(14)
                                Case "JAEGER"
                                    Writer.WriteByte(15)
                                Case "BOMBER"
                                    Writer.WriteByte(16)
                                Case "AUFKLAERER"
                                    Writer.WriteByte(17)
                                Case "WASSERFLUGZEUG"
                                    Writer.WriteByte(18)
                                Case "K-HELI"
                                    Writer.WriteByte(19)
                                Case "T-HELI"
                                    Writer.WriteByte(20)
                                Case "SCHLFF"
                                    Writer.WriteByte(21)
                                Case "FLTR"
                                    Writer.WriteByte(22)
                                Case "KREUZER"
                                    Writer.WriteByte(23)
                                Case "L-BOOT"
                                    Writer.WriteByte(24)
                                Case "U-BOOT"
                                    Writer.WriteByte(25)
                                Case "KANONENBOOT"
                                    Writer.WriteByte(26)
                                Case Else
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                    Writer.WriteByte(0)
                                    Continue For
                            End Select

                            'Eigentlich KI Stufe
                            If E.AIUse <= ObjektEinheit.AISetting.Halten Then
                                Writer.WriteByte(E.AIUse)
                            Else
                                Writer.WriteByte(ObjektEinheit.AISetting.Standard)
                            End If

                            'Spieler
                            Writer.WriteByte(E.Spieler)
                            If E.EinheitenStufe = ObjektEinheit.Stufe.KO Then
                                Writer.WriteByte(1)
                            Else
                                Writer.WriteByte(0)
                            End If
                        Else
                            Writer.WriteByte(0)
                            Writer.WriteByte(0)
                            Writer.WriteByte(0)
                            Writer.WriteByte(0)
                        End If
                    Next
                Next
            End Using
        End If
    End Sub

#End Region

    Public Overrides Sub KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        Select Case e.KeyCode
            Case DataSettings.Key_Scrollen
                MouseUpMitte()
        End Select
    End Sub
End Class
